我是nodejs和MongoDB的初学者。我尝试设计RESTAPI,但是出现了问题。
这是我的路由器代码。
app.post('/fcm',function(req,res){
var beaconid = req.body.beacon_id;
var my_token_id = req.body.user_id;
User.find({beacon_id: beaconid}, function(err, output){
if(err) return res.status(500).json({error: err});
if(!output) return res.status(404).json({error: 'user not found in User collections.'});
console.log("output user id :"+output.user_id + " beacon: " +output.beacon_id );
target_token_id = output.user_id;
res.json(output);
});
});
这是用户架构。
var userSchema = new Schema({
user_id: String,
beacon_id: String
});
控制台中上述功能的结果是: 输出用户ID:undefined,信标:undefined。
但是可以正确打印res函数中的json。
此代码看起来非常简单,但我不知道出了什么问题。 请有人帮我。
答案 0 :(得分:1)
通过使用find
,您期望有1个文档或更多。这意味着方法<Model>.find()
应该在逻辑上返回一个数组。您可以通过在查询后立即记录output
来确保它是正确的,以确保它是一组文档。
要解决您的问题,您可以访问数组索引0处的文档:
User.find({beacon_id: beaconid}, function(err, output){
if(err) return res.status(500).json({error: err});
if(!output) return res.status(404).json({error: 'user not found in User collections.'});
console.log("output user id :"+output[0].user_id + " beacon: " +output[0].beacon_id );
target_token_id = output[0].user_id;
res.json(output);
});
或者改用findOne()
,它仅返回一个文档。
User.findOne({beacon_id: beaconid}, function(err, output){
if(err) return res.status(500).json({error: err});
if(!output) return res.status(404).json({error: 'user not found in User collections.'});
console.log("output user id :"+output.user_id + " beacon: " +output.beacon_id );
target_token_id = output.user_id;
res.json(output);
});