我在将一些数据库值返回到Nodejs中的服务器时遇到麻烦,看来这些值丢失了。
结果记录良好,我正在查找数据,但返回时丢失了。
exports.getProducts = async function () {
return await MongoClient.connect(url, {useNewUrlParser: true}, async function
(err, client) {
let db = client.db(dbName);
return await db.collection('products').find({}).toArray(async function (err,
result) {
if (err) throw err;
client.close();
console.log(result);
return await result
});
});
}
答案 0 :(得分:0)
您应该了解javascript中的asynchronous
,callback
和promise
,之后您可以轻松使用javascript,并且下面的代码对您来说是可以理解的。
对我们来说幸运的是,现在是2018年,使用async / await运行synchronous function
的语法非常容易。在这种情况下,getProducts
应该运行synchronously
,并且应该像这样:
app.get('/api/products/', async function(req, res, next) {
const myData = await mongo.getProducts();
res.send(myData);
});
编辑:mongodb.js
应该稍作更新:
exports.getProducts = function() {
return mongoClient.connect(url, {useNewUrlParser: true }, function(err, client) {
let db = client.db(dbName);
return db.collection('products').find({}).toArray( function(err, result) { .
if(err) throw err;
client.close();
return result;
}
})
}
问:有什么区别?
答:await
正在等待Promise
被解决。因此,value
必须getProducts
和return
。
答案 1 :(得分:0)
在mongodb.js中尝试此代码
const MongoClient=require('mongodb').MongoClient
const assert=require('assert')
const url='mongodb://localhost:27017';
const dbName="productstoredb"
var Result;
var MongoDB;
var MongoConnect = new Promise((resolve, reject) => {
var Db = MongoClient.connect(url, { useNewUrlParser: true }, function (err, client) {
if (err) {
resolve("error")
}
MongoDB = client.db("dbName")
MongoDb.db(dbName)
resolve("connected to the Database")
})
})
var MongoView = new Promise((resolve, reject) => {
MongoDB.collection("products").find().toArray(function (err, result) {
if (err) resolve("ERROR");
Result = result;
resolve("success")
})
})
exports.getProducts = async function () {
console.log(await MongoConnect);
console.log(await MongoView);
return Result;
}
并在您的api上添加await
app.get('/api/products', function (req, res) {
var mydata = await mongo.getProducts();
res.send(Mydata)
})
您应该在Google Promise
,async
-await
上进行搜索。与mongodb的连接不会立即发生。您的代码会调用该程序以连接到数据库,然后开始执行下一行代码,甚至在建立连接之前。