我使用combo Express(Node.js)和Mongoose制作REST API。我尝试使用JWT令牌进行登录,但我遇到了问题。当我执行以下代码时
const mongoose = require('mongoose');
const User = mongoose.model('User');
// other code
_api.post('/login', function (req, res) {
const data = req.body;
// some data control
User.findOne({ username: data.username}, function(err, doc) {
if (hash(password) == doc.password) { // password check
myToken = generateToken(); // generating the token
doc.jwtToken = myToken; // including the generated token to the response
res.status(200).json(doc); // return the final JSON to client
}
}
}
API返回的最终JSON没有字段" jwtToken":" mygeneratedtoken"这很奇怪我将其他时间包括在JSON中的新字段使用相同的语法并且它起作用。我试图使用一个tmp变量,我分配了doc内容(即javascript对象),然后我添加了jwtToken字段并返回tmp变量。但没什么。
如果我的代码出现问题或有什么我需要知道的话,有人可以解释一下吗?
答案 0 :(得分:1)
mongoose返回的文档是不可变的,因此赋值给doc.jwtToken
不会修改对象。您可以使用lean
方法修改查询,也可以toObject
将文档转换为常规javascript对象。尝试:
var docObject = doc.toObject();
docObject.jwtToken = myToken;
res.status(200).json(docObject);