Skip to content

Commit 661e464

Browse files
committed
Fetch user data at the begining of requests
Registering that function to express middleware is much more clean and easy way, but it causes uncessary db calls.
1 parent b5df3f1 commit 661e464

File tree

5 files changed

+74
-25
lines changed

5 files changed

+74
-25
lines changed

server/apis/auth.js

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,19 +41,25 @@ const signin = async (req) => {
4141
console.log({ file, function: 'signin', user });
4242

4343
const result = {
44-
uid: fbUserInfo.id,
45-
name: fbUserInfo.name,
46-
pictureUrl: fbUserInfo.picture,
44+
uid: user.id,
45+
name: user.name,
46+
pictureUrl: user.pictureUrl,
4747
fbToken: req.body.fbToken,
4848
};
4949

50-
session.updateAuthResult(req, result);
50+
session.update(req, {
51+
uid: user.id,
52+
fbToken: req.body.fbToken,
53+
});
5154

5255
return result;
5356
};
5457

5558
const signout = (req) => {
56-
session.updateAuthResult(req, {});
59+
session.update(req, {
60+
uid: null,
61+
fbToken: null,
62+
});
5763

5864
return {};
5965
};

server/app.js

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import createReduxStore from '../modules/store';
1313

1414
import auth from './apis/auth';
1515
import session from './libs/session';
16+
import userMiddleware from './libs/userMiddleware';
1617

1718
import App from '../src/containers/App';
1819

@@ -24,16 +25,16 @@ app.use(bodyParser.json()); // for parsing POST body
2425
app.use(session.createSessionMiddleware());
2526
app.use(express.static(path.join(__dirname, './public')));
2627

27-
app.get('*', (req, res) => {
28-
console.log({ function:'app.get', req: { url: req.url } });
28+
const handleRequest = (req, res) => {
29+
console.log({ file, function: 'handleRequest', url: req.url, session: req.session, user: req.user });
2930

3031
const context = {};
3132

3233
// counter in session for demo
3334
if (!req.session.counter) req.session.counter = 0;
3435
req.session.counter++;
3536

36-
const initialState = session.createInitialReduxState(req.session);
37+
const initialState = session.createInitialReduxState(req.session, req.user);
3738
const store = createReduxStore(initialState);
3839

3940
const appHtml = renderToString(
@@ -51,6 +52,16 @@ app.get('*', (req, res) => {
5152
} else {
5253
res.send(renderPage(appHtml, store.getState()));
5354
}
55+
};
56+
57+
app.get('*', (req, res) => {
58+
console.log({ file, function:'get *', url: req.url, session: req.session });
59+
60+
// Call userMiddleware here only rather than register it by app.use().
61+
// It is to reduce uncessary user db call.
62+
// Once a function is registered by app.use, it is called even for asset request.
63+
userMiddleware(req)
64+
.then(() => handleRequest(req, res));
5465
});
5566

5667
app.post('/signin', (req, res) => {

server/libs/session.js

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,25 @@ import { awsConfig } from '../../config';
22
import connectDynamoDb from 'connect-dynamodb';
33
import session from 'express-session';
44

5-
const createInitialReduxState = (session) => {
5+
const file = 'server/libs/session.js';
6+
7+
const createInitialReduxState = (session, user) => {
68
const state = {
79
sessionCounter: {
810
counter: session.counter,
911
},
1012
};
1113

12-
if (session.uid && session.name && session.pictureUrl && session.fbToken) {
14+
if (session.fbToken && user) {
1315
state.user = {
14-
uid: session.uid,
15-
name: session.name,
16-
pictureUrl: session.pictureUrl,
16+
uid: user.id,
17+
name: user.name,
18+
pictureUrl: user.pictureUrl,
1719
fbToken: session.fbToken,
1820
};
1921
}
2022

21-
console.log({ function: 'createInitialReduxState', state });
23+
console.log({ file, function: 'createInitialReduxState', state });
2224

2325
return state;
2426
};
@@ -57,15 +59,14 @@ const createSessionMiddleware = () => {
5759
return session(sessionOption);
5860
};
5961

60-
const updateAuthResult = (req, authResponse) => {
61-
req.session.uid = authResponse.uid;
62-
req.session.name = authResponse.name;
63-
req.session.pictureUrl = authResponse.pictureUrl;
64-
req.session.fbToken = authResponse.fbToken;
62+
const update = (req, data) => {
63+
console.log({ file, function: 'update', data });
64+
65+
req.session = Object.assign(req.session, data);
6566
};
6667

6768
module.exports = {
6869
createInitialReduxState,
6970
createSessionMiddleware,
70-
updateAuthResult,
71+
update,
7172
};

server/libs/userDB.js

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,20 @@ const findUserTable = (id) => new Promise((resolve, reject) => {
9090
});
9191
});
9292

93+
const findUser = async (id) => {
94+
try {
95+
const user = await findUserTable(id);
96+
97+
console.log({ file, function: 'findUser', id, user });
98+
99+
return user;
100+
} catch(err) {
101+
console.error({ file, function: 'findUser', id, err });
102+
103+
return null;
104+
}
105+
};
106+
93107
const findUserByFbId = async (fbId) => {
94108
try {
95109
const fbIdUser = await findFbIdIndex(fbId);
@@ -108,14 +122,10 @@ const findUserByFbId = async (fbId) => {
108122
}
109123
};
110124

111-
const updateUser = () => {
112-
113-
};
114-
115125
const userDB = {
116126
createUser,
127+
findUser,
117128
findUserByFbId,
118-
updateUser,
119129
};
120130

121131
export default userDB;

server/libs/userMiddleware.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import userDB from './userDB';
2+
3+
const file = 'server/libs/userMiddleware.js';
4+
5+
export default async (req) => {
6+
const uid = req.session.uid;
7+
8+
console.log({ file, function: 'default', url: req.url, uid });
9+
10+
if (!uid) return null;
11+
12+
try {
13+
const user = await userDB.findUser(uid);
14+
req.user = user;
15+
console.log({ file, function: 'default', user });
16+
return null;
17+
} catch(err) {
18+
console.error({ file, function: 'default', err });
19+
return null;
20+
}
21+
};

0 commit comments

Comments
 (0)