我有一些代码可以从mongo数据库中获取一些数据。
express app.get内部的功能将显示在浏览器的url中,但是在此代码中,结果仅显示在控制台中,而不是显示在网页中。
代码如下:
async function showdb() {
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
if (err) throw err;
var dbo = db.db('mydb');
dbo.collection('test').findOne({}, function(err, result) {
if (err) throw err;
console.log(result);
return result;
// res.send(result); // commented out
// db.close(); // commented out
});
});
}
现在的路线:
app.get('/', (req, res) => {
showdb().then(result => {
res.send(result); // result is showing in the console
})
})
res.send(result);
应该在浏览器中显示数据,但在控制台中显示数据。
我该如何解决?
答案 0 :(得分:1)
MongoClient.connect()和collection.findOne() 函数返回Promise,因此您可以链接它们而无需使用带有更少代码的回调:
function showdb() {
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
return MongoClient.connect(url, { useNewUrlParser: true })
.then((db) => {
return db.db('mydb').collection('test').findOne({});
});
}
现在,showdb
函数将向您的路线返回一个承诺。
答案 1 :(得分:0)
您没有包括服务器正在监听的端口。尝试添加以下代码,这可能对您有帮助
var app = express();
app.set('port', 3000);
var server= app.listen(app.get('port'), function()
{
var port = server.address().port;
console.log(" Iam at Port:" + " " + port);
});