node.js认证中间件
我有一个关于将函数声明为中间件的小问题。我有一种感觉,我错过了一些小东西,但现在我被卡住了 声明位于Routerfile中:node.js认证中间件,node.js,typescript,Node.js,Typescript,我有一个关于将函数声明为中间件的小问题。我有一种感觉,我错过了一些小东西,但现在我被卡住了 声明位于Routerfile中: var {authenticate} = require('./middleware/authenticate'); module.exports = function(app) { var users = require('../controllers/userController'); app.route('/users') .post(users
var {authenticate} = require('./middleware/authenticate');
module.exports = function(app) {
var users = require('../controllers/userController');
app.route('/users')
.post(users.createUser);
app.route('/users/me')
.get(users.getMe, authenticate);
app.route('/users/me/token')
.delete(users.logout, authenticate);
app.route('/users/login')
.post(users.login);
};
这会产生如下错误:
Subsequent variable declarations must have the same type. Variable 'authenticate' must be of type '(req: any, res: any, next: any) => void', but here has type 'any'.
身份验证文件如下所示:
var {User} = require('./../api/models/user');
var authenticate = (req, res, next) => {
var token = req.header('x-auth');
User.findByToken(token).then((user) => {
if (!user) {
return Promise.reject();
}
req.user = user;
req.token = token;
next();
}).catch((e) => {
res.status(401).send();
});
};
module.exports = {authenticate};
我想我已经很接近了,但是我想不出来了。试试这个: 注意:中间件总是在控制器函数调用之前出现
为什么要像这样导出authenticate
module.exports={authenticate}
您只需像导出module.exports=authenticate
那样导出它,并像导出var authenticate=require('./中间件/authenticate')那样要求它我试过了,但是没有解决问题。这些荣誉都是为了破坏结构。当路由在我的server.ts文件(startfile)中的位置时,这些函数起作用,但我尝试将其重构为使用路由器文件,然后它与上面的消息一起中断。您能与我共享您的资源吗,以便我们一起解决问题。
app.route('/users/me')
.get(authenticate, users.getMe);