node.js - 如何修复 node.js 和 mongoDB 无法返回信息
问题描述
我在 node.js 中设置了一个服务,它将跟踪网站上的 URL 点击。我在查看 mongoDB 中的数据时遇到问题。我可以拉文件。
_id: ObjectID("5cc0fe18f7875c00bc88de4c")
url:"google.com?ref_source=test"
count:0
然后我解析该字符串并0
以计数结束,如预期的那样。但是,当我返回这个计数然后记录它时,我得到了undefined error
我试图调试代码并偶然发现了一件可能很重要的事情。
node.js 控制台打印出 URL 输入,然后打印出undefined
如果我没有从我的函数中记录结果,则打印出未记录的内容,然后打印出Retrieved From DB: 0
. 如果我查看我的代码,Retrieved From DB: 0
应该在undefined之前打印出来。这是一个可能的问题吗?
var MongoClient = require('mongodb').MongoClient;
var mongourl = "mongodb://localhost:27017/";
function count() {
let string = "reapnow.ml+test"
lengths = string.split("+")
console.log(lengths)
fullurl = (lengths[0] + "?ref_source=" + lengths[1])
MongoClient.connect(mongourl, function (err, db) {
var dbo = db.db("analytics")
var query = {url: fullurl}
dbo.collection("main").find(query).toArray(function (err, result) {
let res = JSON.stringify(result)
res = res.substring(res.indexOf(":") + 1)
res = res.substring(res.indexOf(":") + 1)
res = res.substring(res.indexOf(",") + 1)
res = res.substring(res.indexOf('":') + 2)
res = res.substring(0, res.indexOf('}]'))
console.log("Retrieved From DB: " + res)
//At this point, res is 0
db.close()
return (count)
})
})
}
console.log(count()) //ouputs the word undefined.
我的预期输出是 0,不是未定义的。
编辑 1: 尝试使用 awat/async 并且我做错了还是那不是正确的做法?
var MongoClient = require('mongodb').MongoClient;
var mongourl = "mongodb://localhost:27017/";
async function count() {
let string = "reapnow.ml+test"
lengths = string.split("+")
console.log(lengths)
fullurl = (lengths[0] + "?ref_source=" + lengths[1])
try{
var db = await MongoClient.connect(mongourl)
var dbo = db.db("analytics")
var query = {url: fullurl}
var result = await dbo.collection("main").find(query).toArray()
let res = JSON.stringify(result)
res = res.substring(res.indexOf(":") + 1)
res = res.substring(res.indexOf(":") + 1)
res = res.substring(res.indexOf(",") + 1)
res = res.substring(res.indexOf('":') + 2)
res = res.substring(0, res.indexOf('}]'))
console.log("Retrieved From DB: " + res)
//At this point, res is 0
db.close()
return res
}
catch(error)
{
return error
}
}
console.log(await count())
解决方案
var MongoClient = require('mongodb').MongoClient;
var mongourl = "mongodb://localhost:27017/";
async function count() {
let string = "reapnow.ml+test"
lengths = string.split("+")
console.log(lengths)
fullurl = (lengths[0] + "?ref_source=" + lengths[1])
try{
var db = await MongoClient.connect(mongourl)
var dbo = db.db("analytics")
var query = {url: fullurl}
var result = await dbo.collection("main").find(query).toArray()
let res = JSON.stringify(result)
res = res.substring(res.indexOf(":") + 1)
res = res.substring(res.indexOf(":") + 1)
res = res.substring(res.indexOf(",") + 1)
res = res.substring(res.indexOf('":') + 2)
res = res.substring(0, res.indexOf('}]'))
console.log("Retrieved From DB: " + res)
//At this point, res is 0
db.close()
return count
}
catch(error)
{
return error
}
}
console.log(await count())
在所有异步调用中添加了 try catch 和 async await
推荐阅读
- python - 在排序一个列表期间将不同列表中的相关元素保持在一起
- c# - 如何对通用列表对象进行排序
- javascript - 向和从 js 服务器发送数据的基本方法?
- json - 使用 Pyspark 处理 JSON 结构
- amazon-web-services - 为什么角色假设应该在 lambda 内部完成?
- html - 如何将数值绑定到 CSS 以创建时间线?
- docker - 如何为 docker compose 环境变量设置运行时变量
- javascript - 仅在 Javascript 中具有不同段落的动态 Div
- tsql - 表格模型中的测量列未在浏览器中显示正确的值
- javascript - 调用此函数时如何获取返回值?