我对节点js不是新手,因此我对app.js配置的所有概念都不清楚。因此,寻求社区的帮助。
目前我在app.js文件中有以下代码作为身份验证的中间件。
var authChecker = function(req, res, next){
if(req.query && (req.query.userName || req.query.username)){ // if api query is dependent on the user, validate its token.
try{
var authToken;
req.headers.authorization.split(' ')[0] == "Bearer" ? authToken = req.headers.authorization.split(' ')[1] : "";
var user = jwt.verify(authToken, 'secretkey');
if(req.query.userName == user.username){
next();
}
else{
res.cookie('username', '', {expires: new Date(0)});
res.cookie('token', '', {expires: new Date(0)});
return res.status(401).json({"msg": "Authentication required."});
}
}
catch(err){ // if not able to validate the token, then expire all the available token
res.cookie('username', '', {expires: new Date(0)});
res.cookie('token', '', {expires: new Date(0)});
return res.status(401).json({"msg": "Authentication required."})
}
}
else{
next();
}
};
我在相同的app.js文件中使用它来验证某些API。
app.namespace('/api', function () {
app.get('/abc', authChecker, abc.cde);
app.get('/cde', efg.ghi); //authentication not required for this API.
现在我想模块化这个。 我不想在app.js中定义authChecker,而是让它在不同的文件中定义,并使用它类似。 有人可以帮我这里。 我想我们可以通过使用app.js以某种方式实现这一点,但不确定如何。 如果您需要更多信息,请与我们联系。
答案 0 :(得分:1)
创建auth.js
文件,然后将代码导出authChecker
这样的函数
var authChecker = function(req, res, next){
if(req.query && (req.query.userName || req.query.username)){ // if api query is dependent on the user, validate its token.
try{
var authToken;
req.headers.authorization.split(' ')[0] == "Bearer" ? authToken = req.headers.authorization.split(' ')[1] : "";
var user = jwt.verify(authToken, 'secretkey');
if(req.query.userName == user.username){
next();
} else {
res.cookie('username', '', {expires: new Date(0)});
res.cookie('token', '', {expires: new Date(0)});
return res.status(401).json({"msg": "Authentication required."});
}
} catch(err) { // if not able to validate the token, then expire all the available token
res.cookie('username', '', {expires: new Date(0)});
res.cookie('token', '', {expires: new Date(0)});
return res.status(401).json({"msg": "Authentication required."})
}
} else {
next();
}
};
module.exports = {
authChecker: authChecker,
}
在app.js
像这样导入
var auth = require('./auth.js'); // path to auth.js file
app.get('/abc', auth.authChecker, abc.cde);
在此处详细了解nodejs模块:https://nodejs.org/api/modules.html
答案 1 :(得分:1)
创建新文件:
authChecker.js
var authChecker = function(req,res,next) {
//your code goes here
}
export default authChecker; // you have to write this line
所以在任何其他js文件中你都可以要求:
var authChecker = require("./pathToAuthChecker");
答案 2 :(得分:1)
您可以将authChecker放在单独的文件中并将其导出以便在app.js
中使用<强> auth.js 强>
module.exports = {
authChecker: function(req, res, next){..logic..}
}
<强> app.js 强>
auth = require("auth") //path to auth.js
app.get("/abc", auth.authChecker, function(req, res){});
app.get("/cde", function(req, res){});
假设你的项目布局是:
/root
|-app.js
|-auth.js