node.js - Nodejs、MongoDB异步回调问题
问题描述
我是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:未定义,信标:未定义。
但是 res 函数中的 json 打印正确。
这段代码看起来很简单,但我不知道是什么问题。请有人帮助我。
解决方案
通过使用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);
});
推荐阅读
- python - 通过 exe 从 python 尝试时无法从数据库中获取信息
- c - 3 表三角图案
- excel - 通过匹配名称将值从一个 excel 表粘贴到另一个
- java - GraalVM 原生镜像是提高整体应用程序性能还是只是减少启动时间?
- function - 当插值函数必须作为全局变量多次访问时优化 Julia 性能
- docker - 使用 Docker Image 运行量角器脚本
- java - 从 Firebase 存储获取上传时间
- python - 模型作品接受支持向量机 SVM 和线性判别分析
- javascript - react-image-magnify 减少高度和宽度
- node.js - Discord 机器人有时会做出反应