0

我正在构建一个使用 JWT 进行身份验证的简单应用程序。但是我不断收到错误消息,说明我GET需要回调函数的路线。

我期待什么?

我应该取回当前用户的数据。

我实际上得到了什么?

错误:Route.get() 需要回调函数,但得到了 [object Object]

路线:

const authenticate = require("../middlewares/authenticate");
const usersController = require("../controllers").users;

app.get("/users/me", authenticate, usersController.getMe);

模型:

"use strict";
const jwt = require("jsonwebtoken");

module.exports = (sequelize, DataTypes) => {
  var User = sequelize.define(
    "User",
    {
      email: DataTypes.STRING,
      password: DataTypes.STRING
    },
    {
      classMethods: {
        associate: function(models) {
          // associations can be defined here
        },
        findByToken: function(token) {
          const User = this;
          let decoded;

          try {
            decoded = jwt.verify(token, "leogoesger");
          } catch (e) {
            console.log(e);
          }

          return User.find({ where: { email: decoded.email } });
        }
      }
    }
  );
  return User;
};

中间件:

const { User } = require("../models/user");

const authenticate = (req, res, next) => {
  console.log("called here");
  const token = req.header("x-auth");
  User.findByToken(token)
    .then(user => {
      if (!user) {
      }

      req.user = user;
      req.token = token;
      next();
    })
    .catch(e => {
      res.status(401).send(e);
    });
};

module.exports = { authenticate };

控制器:

module.exports = {
  getMe(req, res) {
    res.status(200).send({ message: "hello" });
  }
};
4

1 回答 1

0

您的身份验证模块导出一个对象,但您这样做:

const authenticate = require("../middlewares/authenticate");

这意味着你const authenticate是一个对象,而不是你的函数。将其更改为:

const authenticate = require("../middlewares/authenticate").authenticate;

或者,更改模块以直接导出函数,而不是导出包含函数的对象。

于 2017-11-05T03:41:58.703 回答