这是我用来显示MongoDB数据的代码。由于“ 未定义结果”而出现错误。我使用了MongoDB的ID来显示结果。但是存储的数据不会显示在单独的页面上。
const express = require('express');
const app = express();
const ejs = require('ejs');
const assert = require('assert');
const bodyParser = require('body-parser');
const MongoClient = require('mongodb').MongoClient;
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.set('view engine','ejs');
app.set('')
var url = 'mongodb://localhost:27017';
app.get('/form',(req, res)=>{
res.render('form');
});
app.get('/data',(req, res)=>{
MongoClient.connect(url, (err, db)=>{
assert.equal(null, err);
var dbo = db.db("form");
var details = dbo.collection('usertable').find();
details.forEach((data)=>{
if(_id == 5b5ef0b8e0d9c23c2012cef2){
result = item;
return true;
}
})
});
res.render('customerdata',{item: result });
});
我能够使用以下代码存储数据:
app.post('/form/submit', (req, res)=>{
var item = {
title: req.body.title,
content: req.body.content,
author: req.body.author
};
MongoClient.connect(url, (err, db)=>{
assert.equal(null, err);
var dbo = db.db("form");
dbo.collection('usertable').insertOne(item, (err, result)=>{
assert.equal(null, err);
console.log('Inserted');
db.close();
});
});
res.redirect('/form');
});
app.listen(8080);
答案 0 :(得分:0)
我相信您正面临这个问题,因为
在forEach循环中,每个“数据”都是一个对象。因此,在检查时,必须将id称为data._id。尝试为结果分配值时,类似data.item。
我修改了代码。这应该起作用。
app.get('/data',(req, res)=>{
MongoClient.connect(url, (err, db)=>{
assert.equal(null, err);
var dbo = db.db("form");
var details = dbo.collection('usertable').find();
var result;
details.forEach((data)=>{
if(data._id == 5b5ef0b8e0d9c23c2012cef2){
result = data.item;
return true;
}
})
});
res.render('customerdata',{item: result });
});
答案 1 :(得分:0)
需要注意的几件事:
dbo.collection('usertable').find().toArray(function(err, items) {...});
来访问数据。答案 2 :(得分:0)
find是异步的,您必须在find回调中返回结果,否则未定义:
app.get('/data',(req, res)=>{
MongoClient.connect(url, (err, db)=>{
assert.equal(null, err);
var dbo = db.db("form");
dbo.collection('usertable').find({}, function(err, details){
if(err)
{
res.render('customerdata',{item: null });
}
else
{
var result = null;
details.forEach((data)=>{
if(data._id.toString() == "5b5ef0b8e0d9c23c2012cef2"){
result = item;
}
})
res.render('customerdata',{item: result });
}
});
});
此外,您的发帖请求有相同的错误,即在插入操作结束之前重定向用户。正确的代码是:
app.post('/form/submit', (req, res)=>{
var item = {
title: req.body.title,
content: req.body.content,
author: req.body.author
};
MongoClient.connect(url, (err, db)=>{
assert.equal(null, err);
var dbo = db.db("form");
dbo.collection('usertable').insertOne(item, (err, result)=>{
assert.equal(null, err);
console.log('Inserted');
db.close();
res.redirect('/form');
});
});
});