Express中重复进行记录控制"/>
避免在Express中重复进行记录控制
我有下面的原始后端代码,不知道如何避免在每个Web服务中重复登录控件,谢谢;
app.post("/createEvent", function(req, res) {
// LOGGED IN CONTROL
if (!req.session.loggedIn) {
console.log(" FORBIDDEN ");
res.status(403).send({ errorCode: "403" });
return;
}
});
app.post("/readEvent", function(req, res) {
// LOGGED IN CONTROL
if (!req.session.loggedIn) {
console.log(" FORBIDDEN ");
res.status(403).send({ errorCode: "403" });
return;
}
});
app.post("/updateEvent", function(req, res) {
// LOGGED IN CONTROL
if (!req.session.loggedIn) {
console.log(" FORBIDDEN ");
res.status(403).send({ errorCode: "403" });
return;
}
});
app.post("/deleteEvent", function(req, res) {
// LOGGED IN CONTROL
if (!req.session.loggedIn) {
console.log(" FORBIDDEN ");
res.status(403).send({ errorCode: "403" });
return;
}
}
我想我应该在外部函数中包含代码吗?
回答如下:使其成为中间件:
function requiresAuth (req, res, next) {
// LOGGED IN CONTROL
if (!req.session.loggedIn) {
console.log(" FORBIDDEN ");
res.status(403).send({ errorCode: "403" });
return;
}
else {
next(); // continue the process
}
}
现在您可以像这样使用它:
app.post("/createEvent", requiresAuth, function(req, res) {});
app.post("/readEvent", requiresAuth, function(req, res) {});
app.post("/updateEvent", requiresAuth, function(req, res) {});
app.post("/deleteEvent", requiresAuth, function(req, res) {});
在其自己的文件中实现,现在您有了一个可以在代码中的任何位置使用的模块。
中间件很灵活。请记住,Express允许您将中间件应用于整个路由:
app.use('/protected/path', requiresAuth, protectedRouter);
其他提示:您可以使用它来实现角色:
function requiresAuth (role) {
return function (req, res, next) {
// LOGGED IN CONTROL
if (!req.session.loggedIn || req.session.role !== role) {
console.log(" FORBIDDEN ");
res.status(403).send({ errorCode: "403" });
return;
}
else {
next(); // continue the process
}
}
}
app.post("/createEvent", requiresAuth('USER'), function(req, res) {});
app.post("/readEvent", requiresAuth('USER'), function(req, res) {});
app.post("/updateEvent", requiresAuth('USER'), function(req, res) {});
app.post("/deleteEvent", requiresAuth('ADMIN'), function(req, res) {});
如果需要,您可以实现更复杂的角色逻辑。
更多推荐
避免在Express中重复进行记录控制
发布评论