我正在尝试更改JSON对象的某些字段,但是当我console.log或res.send时得到的结果不是预期的
create('bar') astype Bar
我正在使用Sequelize,并且字段“ 角色”不直接位于表“ 用户”上。因此,我使用和 include (执行JOIN)来获得角色:
user2 = {
...user,
newFiels : 'newfiled',
}
除 4)之外,其他所有功能似乎都可以使用,我不知道为什么
我正在做一个项目的后端,要求我提供这种格式的对象(请参阅响应):
// in login function
let response = {
status: "NotOK",
userInfo: {
username: null,
nom: null,
prenom: null,
role: null,
},
infoMsg: null,
error: false,
errorMsg: null,
}
const usernameInput = req.query.username;
const passwordInput = req.query.password;
// 1)
Utilisateurs.findOne({
attributes: ['username', 'nom', 'prenom'],
include: [
{ model: Techniciens },
{ model: Magasiniers },
],
where: {
[Op.and]: [
{ username: usernameInput },
{ password: passwordInput },
],
}
})
.then(user => {
if (user) {
// 2) and 3)
if (user.technicien != null) {
user.role = 'technicien';
} else {
user.role = 'magasinier';
}
// 4)
response.userInfo = user;
response.status = 'OK'
response.infoMsg = "User found !"
console.log(`response : ${JSON.stringify(response)}`);
// 5)
res.send(response);
return;
} else {
// ...
}
})
.catch(error => {
// ...
});
Description: authenticate the user
Body content :
{
"username" : "theUsername",
"password" : "thePassword"
}
Response :
{
"status" : "OK/NotOK",
"userInfo" : {
"username" : "theUsername",
"nom" : "theName",
"prenom" : "theLastName",
"role" : "magasinier/technicien"
},
"infoMsg": "infomsg",
"error": true/false,
"errorMsg": "errmsg"
}
如您所见,我想要的所有字段都在这里。也许我很困惑,我不应该拥有{
"status":"OK",
"userInfo":{
"username":"davalres",
"nom":"Alvarez",
"prenom":"David",
"technicien":null,
"magasinier":{
"username":"davalres"
}
},
"infoMsg":"User found !",
"error":false,
"errorMsg":null
}
,...
答案 0 :(得分:1)
您获得的user
对象是一个模型实例,因此我不会将此类对象嵌入您自己的响应对象中,也不会直接对其进行修改,因为该模型最终可能会还原您对其所做的未保存的更改。
通过调用.get({plain:true})
来获取所需信息的完整副本。我个人还将response
的范围保留在then
回调的本地(如果需要,在catch
回调中创建另一个):
if (user) {
let response = {
status: "OK",
userInfo: {
...user.get({plain:true}),
role: user.technicien ? 'technicien' : 'magasinier';
},
infoMsg: "User found",
error: false,
errorMsg: null,
};
console.log(`response : ${JSON.stringify(response)}`);
res.send(response);
return;
} else //....