我对函数作为中间件的声明有一个小问题。我感觉自己缺少一些小东西,但现在卡住了。
该声明在Routerfile中:
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};
我想我已经接近了,但无法弄清楚。
答案 0 :(得分:0)
尝试一下:
注意:中间件总是在控制器函数调用之前出现。
app.route('/users/me')
.get(authenticate, users.getMe);