javascript - 显示来自 MongoDB 的结果
问题描述
不是 JavaScript/Node.js/数据库专业人士,只是想了解一些关于 Node.js 和 MongoDB 的基本概念。我陷入了以下困境:
我想在页面上显示来自 mongoDB 的查询结果,但除了在控制台中,我无法在其他任何地方这样做。
这是我用来查询 mongodb 的模块:
var MongoClient = require('mongodb').MongoClient;
function getOwner(currentSite){
const urlM = "xxxx";
MongoClient.connect(urlM,{ useUnifiedTopology: true, useNewUrlParser: true },function(err, db) {
if (err) throw err;
var dbo = db.db("TrainingDB");
dbo.collection("SiteOwners").find({SiteName: currentSite}).toArray(function(err,result){
if (err) throw err;
console.log(result[0].SiteOwner) //this shows correct result
db.close();
return result[0].SiteOwner //this doesn't do anything
})
});
};
exports.getOwner=getOwner;
控制台显示正确的结果,但不返回任何值。这是我用于检索数据的处理程序:
var apps = require("./apps");
function site1(response){
console.log("Request handler 'site1 has been called.")
response.writeHead(200,{"Content-Type": "text/html"});
response.write("Welcome to Site1</p>The Owner of this site is: "+apps.getOwner("Site1"));
response.end();
};
+apps.getOwner("Site1")
返回未定义。
解决方案
您的return
语句不会为该getOwner
函数返回任何内容。而是返回...function(err,result){
.
我会让你的函数返回一个你可以解决并得到结果getOwner
的承诺:site1
function getOwner(currentSite){
const urlM = "xxxx";
return new Promise(resolve => {
MongoClient.connect(urlM,{ useUnifiedTopology: true, useNewUrlParser: true },function(err, db) {
if (err) throw err;
var dbo = db.db("TrainingDB");
dbo.collection("SiteOwners").find({SiteName: currentSite}).toArray(function(err,result){
if (err) throw err;
console.log(result[0].SiteOwner) //this shows correct result
resolve(result[0].SiteOwner)
db.close();
})
});
})
}
然后,在您的site1
函数中执行以下操作:
function site1(response){
apps.getOwner("Site1")
.then(result => {
console.log("Request handler 'site1 has been called.")
response.writeHead(200,{"Content-Type": "text/html"});
response.write("Welcome to Site1</p>The Owner of this site is: "+result);
response.end();
})
};
推荐阅读
- php - 在 Intelli 中用于 .blade.php 文件的 Emmet
- python - Python:将文件复制到 USB 驱动器 - 线程比同步慢
- docker - 在 windows server 2016 1607 上使用 Docker linux 容器
- django - Admin中多对多连接表的Django注册视图
- c++ - IncrediBuild - 错误:字符串的第一个字符应为“0”或“1”
- angular - Angular TypeError('readdirp: root argument must be a string.')
- c++ - 在 OpenGL 的“原始组装”阶段会发生什么
- single-sign-on - 使用 cypress 进行 E2E 测试 - Azure AD 单点登录
- nativescript - 如果有较新版本,提示用户更新应用程序
- sql - 如何在 SAP HANA 的动态 sql 中使用表变量?