node.js - 在URL中传递参数后如何使用nodejs从mongodb获取和显示数据?
问题描述
在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>
解决方案
问题 1 - Find 方法是和异步方法,这意味着您必须等待结果(使用等待或然后)
问题 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;});
});
推荐阅读
- javascript - 绝对 url 不能放在点运算符之前反应
- docker - 链接在两个不同 docker-compose 文件中配置的容器
- oracle - 将 select 中的参数插入过程
- javascript - 如何在自动完成 jquery 中过滤 JSON 数组并在 JavaScript 中显示动态值?
- python - 为什么 Python3 守护线程会立即在控制台中关闭?
- django - 如何在 Django Rest Framework 中创建触发器来更改布尔字段?
- php - 使用带有 SUBSTRING 的 UPDATE 语句来更新结果
- spring-boot - com.zaxxer.hikari.pool.HikariPool$PoolInitializationException:池初始化期间出现异常:springHikariCP - 连接不可用
- wordpress - WordPress 按关键字搜索结果
- node.js - 如何找出在哪个版本的 Node.js 中发布了某个提交/拉取请求