当用户到达某些端点时,我有以下函数在服务器上调用,例如/api/login
,我在服务器上处理它,因为我想设置服务器端cookie来存储身份验证令牌。现在看起来是这样的:
const createSession = (req, res, url) => {
const apiCall = request.post(url, (err, response, body) => { // eslint-disable-line
if (err) return res.sendStatus(500);
else if (response.statusCode !== 200) return res.status(response.statusCode).send(body);
const data = JSON.parse(body);
const options = { path: '/', hostOnly: true, httpOnly: true, maxAge: 3300000 }; // 55 min expiration
if (secrets.DOMAIN !== 'localhost') options.secure = true;
res.cookie('SESSION_TOKEN', data.token, options);
res.cookie('SESSION_EMAIL', data.email, options);
res.status(200).send(body);
});
req.pipe(apiCall);
};
,它的工作原理,但我发现它非常非常冗长,我不确定是否有一个更好的方法来处理这个,也许是其他的东西除了请求库?我试图用节点的http来解决这个问题,但从来没有。
下面是在我的快递服务器中使用这个函数的例子:
app.post('/api/login', (req, res) => {
const url = `${secrets.API_HOST}/login`;
createSession(req, res, url);
});
我建议使用express-session,但这部分取决于您的用例。