Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
node.js认证中间件_Node.js_Typescript - Fatal编程技术网

node.js认证中间件

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

我有一个关于将函数声明为中间件的小问题。我有一种感觉,我错过了一些小东西,但现在我被卡住了

声明位于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};

我想我已经很接近了,但是我想不出来了。

试试这个:

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


为什么要像这样导出authenticate
module.exports={authenticate}
您只需像导出
module.exports=authenticate
那样导出它,并像导出
var authenticate=require('./中间件/authenticate')那样要求它app.route('/users/me')
    .get(authenticate, users.getMe);