在URL中传递参数后,我只想在用户使用参数输入URL时显示Mongodb中的数据。
例如,如果URL为“ http://www.example.com/product/1”,则应检索属于id值“ 1”的数据并将其显示在前端。
我已经编写了用于基于id显示数据的代码,但是由于存在一些我无法发现的错误,因此没有显示结果。
const express = require('express');
const app = express();
app.use(express.static('public'));
const ejs = require('ejs');
const bodyParser = require('body-parser')
app.set('view engine', 'ejs');
const MongoClient = require('mongodb').MongoClient;
const url = "mongodb://localhost:27017";
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
app.get('/product/:id', (req, res) => {
var data = [
{
id: 1,
},
{
id: 2,
}
]
data.forEach((product) => {
if (product.id == req.params.id) {
MongoClient.connect(url, { useNewUrlParser: true }, (err, db) => {
if (err) throw err;
var dbo = db.db('product')
var cursor = dbo.collection('details').find();
cursor.forEach((doc, err) => {
if (err) throw err;
data.push('doc');
}, () => {
db.close();
});
});
return true;
}
})
res.render('productdetails',{title:"Product Details", product: data});
});
并且html部分是
<h3><%= data.producttitle %></h3>
答案 0 :(得分:0)
问题1-Find方法是and async方法,这意味着您必须等待结果(使用wait或then)
问题2-您将字符串推入数据数组,而不是数据本身。 您还可以避免使用其他数组
问题3-您没有为查找指定任何过滤器
const express = require('express');
const app = express();
app.use(express.static('public'));
const ejs = require('ejs');
const bodyParser = require('body-parser')
app.set('view engine', 'ejs');
const MongoClient = require('mongodb').MongoClient;
const url = "mongodb://localhost:27017";
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
app.get('/product/:id', (req, res) => {
MongoClient.connect(url, { useNewUrlParser: true }, (err, db) => {
if (err) throw err;
var dbo = db.db('product')
dbo.collection('details').find({id : id}).toArray().then(products => {
res.render('productdetails',{title:"Product Details", product: products[0]});}).catch(err => {throw err;});
});