所以我尝试在我的nodejs应用程序上实现jwt。
这是我的令牌方法:
app.post("/api/v1/token", function(req, res) {
if (req.body.email && req.body.password) {
let email = req.body.email;
let password = req.body.password;
let user = users.find(function(u) {
return u.email === email && u.password === password;
});
if (user) {
let payload = {
id: user.id
};
let token = jwt.encode(payload, cfg.jwtSecret);
res.json({
id: user.id,
token: token,
status:'success'
});
} else {
res.sendStatus(401);
}
} else {
res.sendStatus(401);
}
});
如您所见,我将其推荐给用户模块。 然后我找到基于电子邮件和密码的用户。 它指的是我的用户js模块。
这是我的用户js模块:
var users = require('./app/api/users/login.js');
module.exports = users;
登录js模块:
const db = require('../../config/db');
const abort = require('../../util/abort');
const ctl = {
getAllUser(req, res, next) {
db.any('SELECT * FROM users')
.then((data) => {
if (data.length === 0) {
throw abort(404, 'No user data yet', 'Empty user table');
}
return res.status(200).json([{
data,
}]);
})
.catch(err => next(err));
},
};
module.exports = ctl;
idk为什么,每次我尝试获取令牌。 它总是返回错误消息,如下所示: { "状态":"错误", " message":" users.find不是一个功能" }
请帮助我。 谢谢。答案 0 :(得分:0)
在您的login.js模块中,没有名为“find”的方法。尝试调用其中存在的方法,例如 getAllUser 。
答案 1 :(得分:0)
它提供users.find is not a function
,因为在这种情况下users
不是数组。 find()
仅存在于数组中。您可以console.log(users)
知道错误发生前的价值
进一步检查您的代码,您似乎在next(err)
中返回login.js
。如果您在调用getAllUser()
时手动将回调包装为承诺,请检查err
对users
的任何意外处理