我正在使用NodeJs和MongoDb作为后端服务。在我的收藏集中,我有几个文档包含名为_id和Name的字段,但是Node仅返回第一个文档并在控制台中显示错误。我想仅获取其中的Name字段一个文件。
错误:
这是我的代码:
var express = require('express');
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:true}));
app.post('/offers',(req, res) => {
MongoClient.connect(url, (err, db) => {
if(err) throw err;
var dbo = db.db('Tiffino_db');
dbo.collection("Offers")
.find({},{ projection: { _id: 0 } })
.toArray((err, result) => {
if (err) {
console.log("Error:", +err);
}
else {
for(var i = 0;i<result.length;i++){
res.send(result[i].Name);
}
db.close();
}
});
});
});
请让我知道我在上面的代码中做错了什么。
谢谢
答案 0 :(得分:1)
您似乎正在尝试使用Response.Send()循环发送多个响应,因为响应仅发送一次。 这将行不通,您需要创建一个名称数组,然后使用Response.Send()进行一次。
使用res.send(result.map(r => r.name))
可能会起作用
答案 1 :(得分:1)
您应该将结果聚合到一个变量中,然后只调用一次res.send():
let resultString;
for(var i = 0;i<result.length;i++){
resultString += result[i].Name + '\n';
}
res.send(resultString);
如果要流式传输结果,则可以使用res.write(),并在完成后调用res.end()
答案 2 :(得分:1)
...
...
else {
output = result.map(offer => offer.name);
res.send({output});
db.close();
}
这应该起作用,因为您只能在单个response
对象上发送一次响应,而您调用该对象的时间为results.length
次。
答案 3 :(得分:1)
您不能在for循环中多次使用res.send(),请尝试这样的操作
var data=[];
for(var i = 0;i<result.length;i++){
data.push(result[i].Name);
}
res.send(data);
答案 4 :(得分:1)
li
答案 5 :(得分:0)
我很确定您不应该多次致电def draw_grid(n):
for i in range(n):
for j in range(1, n + 1):
print(j, end=' ')
print()
draw_grid(3)
。由于您是在循环中调用它,因此它将发送第一个文档,而在下一个文档中按预期失败。