我正在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
应该在未定义的之前打印出来。这可能是个问题吗?
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())
答案 0 :(得分:-1)
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())
在所有异步调用中添加了尝试捕获和异步等待