请帮帮我。.
我正在尝试使用Nodejs从mongodb中检索数据 我的代码是
index.js
var express = require('express');
var app = express();
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/studentprogression';
var str = "";
app.route('/results').get(function(req, res)
{
MongoClient.connect(url, function(err, db) {
var cursor = db.collection('results').find();
//noinspection JSDeprecatedSymbols
cursor.each(function(err, item) {
if (item != null) {
str = str + " " + item.marks + "</br>";
}
});
res.send(str);
db.close();
});
});
var server = app.listen(3000, function() {});
我在mongodb中的数据库是
{ _id: 5c6935d6b215280be42a6005,
srn: '01FM17CCA004',
marks:
[ { sub1: 'E',
sub2: 'D',
sub3: 'A',
sub4: 'D',
sub5: 'S',
taken: 20,
earned: 20,
sgpa: 6.95,
_id: 5c6935d6b215280be42a6006 } ],
__v: 0 }
并且输出应该是数组(sub1,.... sgpa)内的数据,但是我将其作为[object Object]
所以请帮助我
答案 0 :(得分:0)
您不应在HTTP请求回调中连接到mongo,只需连接一次并重新使用该连接。
const mongoClient = new MongoClient(url, { useNewUrlParser: true });
mongoClient.connect((err) => {
if (err) throw err;
// Available via req.app.locals.db.
app.locals.db = mongoClient.db('your-database');
app.listen(3000);
});
建议您不要将数据格式化为服务器上的字符串,而无需将光标循环到toArray
,而是将数组作为JSON传递回客户端并让客户端呈现不管它想要什么:
app.route('/results').get(async (req, res) => {
const { db } = req.app.locals;
const results = await db.collection('results').toArray();
res.status(200).json(results);
});
答案 1 :(得分:0)
您的item
对象不是简单的字符串。它是一个对象数组。
为了将实际对象转换为字符串,您必须对其进行迭代,或者按照Dominic所说的使用.toArray()
方法使事情变得更简单。之所以[Object object]
是因为您已将整个对象映射到一个字符串。
也正如Dominic所说,请不要在请求回调中建立http连接,请先连接它,然后使用该连接来引用数据库。