【发布时间】:2020-06-16 13:29:49
【问题描述】:
我正在构建一个 MEVN 堆栈 CRUD 应用程序(Vue、Node、Express、MongoDB)。我正在尝试为我的应用设置以下 Express 路由...
postRoutes.get('/view/:id', async (req, res) => {
const collection = await loadPostsCollection();
let id = req.params.id;
res.send(await collection.find({}).toArray());
res.status(201).send();
});
...以便它根据数据的 id 从 MongoDB 返回特定数据。我不知道如何设置res.send 以便它根据req.params.id 查找数据。我试着像这样传递req.params.id...
postRoutes.get('/edit/:id', async (req, res) => {
const collection = await loadPostsCollection();
let id = req.params.id;
res.send(await collection.find({ _id: mongodb.ObjectId(req.params.id)}).toArray());
res.status(201).send();
});
...但这也没有用。知道如何设置此路由以根据 ID 参数查找数据吗?谢谢!
我的完整 Express 路由器页面如下:
const express = require('express');
const postRoutes = express.Router();
const mongodb = require('mongodb')
postRoutes.get('/', async (req, res) => {
const collection = await loadPostsCollection();
res.send(await collection.find({}).toArray());
});
postRoutes.post('/add', async (req, res) => {
const collection = await loadPostsCollection();
let task = req.body;
await collection.insertOne(task);
res.status(201).send();
});
postRoutes.get('/view/:id', async (req, res) => {
const collection = await loadPostsCollection();
let id = req.params.id;
res.send(await collection.find({}).toArray());
res.status(201).send();
});
postRoutes.delete('/delete/:id', async (req, res, next) => {
const collection = await loadPostsCollection();
collection.deleteOne({ _id: mongodb.ObjectId(req.params.id) });
res.status(200).send({});
});
async function loadPostsCollection() {
const client = await mongodb.MongoClient.connect(
'...',
{
useNewUrlParser: true
}
);
return client.db("test").collection("todos")
}
module.exports = postRoutes;
【问题讨论】:
-
你能详细说明“没有工作”吗?你有什么错误吗?
-
意思是,将
{ _id: mongodb.ObjectId(req.params.id)}传递给collection.find()不会成功根据数据的id 从MongoDB 返回特定数据。换句话说,调用中请求的特定数据不会作为 Express 路由的响应返回。 -
@JS_is_awesome18 你在这两种情况下都获得了该集合的完整数据吗?
-
是的,我通过运行
res.send(await collection.find({}).toArray());获得了完整的数据,但我想在/view/:id路由中配置相同的响应,以便它只返回特定于该 ID 参数的数据。 -
在发送到过滤器之前尝试记录
mongodb.ObjectId(req.params.id)。
标签: javascript node.js mongodb express vue.js