无状态会话 api 请求
stateless session api request
我正在构建一个使用 JWT 进行身份验证的简单应用程序。但是我不断收到错误消息,说路线 I GET
需要回调函数。
我期待什么?
我应该取回当前用户的数据。
我实际上得到了什么?
错误:Route.get() 需要回调函数但得到了一个 [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" });
}
};
您的身份验证模块导出一个对象,但您这样做:
const authenticate = require("../middlewares/authenticate");
这意味着您的 const authenticate
是一个对象,而不是您的函数。将其更改为:
const authenticate = require("../middlewares/authenticate").authenticate;
或者,更改模块以直接导出函数,而不是导出包含函数的对象。
我正在构建一个使用 JWT 进行身份验证的简单应用程序。但是我不断收到错误消息,说路线 I GET
需要回调函数。
我期待什么?
我应该取回当前用户的数据。
我实际上得到了什么?
错误:Route.get() 需要回调函数但得到了一个 [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" });
}
};
您的身份验证模块导出一个对象,但您这样做:
const authenticate = require("../middlewares/authenticate");
这意味着您的 const authenticate
是一个对象,而不是您的函数。将其更改为:
const authenticate = require("../middlewares/authenticate").authenticate;
或者,更改模块以直接导出函数,而不是导出包含函数的对象。