node.js认证中间件

时间:2018-07-05 18:44:07

标签: node.js typescript

我对函数作为中间件的声明有一个小问题。我感觉自己缺少一些小东西,但现在卡住了。

该声明在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};

我想我已经接近了,但无法弄清楚。

1 个答案:

答案 0 :(得分:0)

尝试一下:

  

注意:中间件总是在控制器函数调用之前出现。

app.route('/users/me')
    .get(authenticate, users.getMe);
相关问题