我有一个喜欢的系列 { ID: “david123” 朋友[{id:joe321,lname“woo”,fname“joe”}] }
我想在朋友中添加新元素
我目前有这个,但它似乎没有工作
app.post('/users/:uid/friends', function(req, res){
var userId = req.params.uid;
Friend.update({'_id': userId},
{$push: {Friends: req.body.friend}},
{ upsert : true },
function(err, result){
if (err){
console.log(err);
} else {
res.status(200).json(result);
}
})
});
我像这样定义了我的架构
var FriendSchema = new mongoose.Schema({
_id: String,
Friends: [{
_id: String,
fname: String,
lname: String
}]
});
当我发出请求时,我发送 {朋友:'{userId:“john123”,lname“smoth”,fname“john”}', userId:'userId123'}即时通讯 [TypeError:不能使用'in'运算符来搜索{userId:“john123”中的'_id',lname“smoth”,fname“john”}}
答案 0 :(得分:0)
句子"它似乎没有工作" 告诉我们什么,真的。打印有错误吗?是否插入了错误的数据?没有数据?对HTTP请求的响应是什么?这些是最重要的问题,但由于没有提供相关信息,我只能给你一些提示:
friend
属性对于(3),请参阅:https://github.com/expressjs/body-parser#bodyparserjsonoptions
对于(4),请参阅:https://docs.mongodb.com/manual/reference/operator/update/addToSet/
您没有对您使用的框架发表任何意见,而您没有使用框架标记提出问题,但您的代码表明您可能正在使用Express。如果是这种情况,那么在请求处理程序中使用req.body
则需要使用正确的正文解析器中间件:
npm install body-parser --save
并在您的代码中 - 开头:
const bodyParser = require('body-parser');
在您需要app
后app.post(...);
之后的某个地方:
app.use(bodyParser.json());
如果您希望将请求正文解析为JSON,那么您可以在处理程序中使用req.body
和req.body.friend
。
在请求处理程序中使用一些基本的日志记录:
app.post('/users/:uid/friends', (req, res) => {
// start with:
console.log('Request body:' JSON.stringify(req.body));
// the rest of the logic ...
});
查看响应中实际传递的内容,并通过适当的主体解析器正确反序列化。