【发布时间】:2022-01-13 11:42:58
【问题描述】:
问题是当我使用邮递员发出 put 请求时,我的 vscode 终端中出现错误:
让产品 = 等待 Product.findById(req.params.id);
^
类型错误:无法读取未定义的属性“id”。
我在邮递员 http://localhost:4500/api/v1/product/61dfc2ba3eb817d287929a7a 上提出这个请求 (61dfc2ba3eb817d287929a7a 是 ID),正文为原始 json。 req.params.id 即将变得未定义..
这似乎是一个解析错误,所以我添加了 body-parser 和 cors,但出现了同样的错误..
代码:
const express = require("express");
const mongoose = require("mongoose");
const bodyParser = require("body-parser");
const cors = require("cors");
const app = express();
mongoose
.connect("mongodb://localhost:27017/sampl", {
useNewUrlParser: true,
useUnifiedTopology: true,
})
.then(() => {
console.log("db connected");
})
.catch((err) => {
console.log(err);
});
app.use(express.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(cors());
const productSchema = new mongoose.Schema({
name: String,
description: String,
price: Number,
});
const Product = new mongoose.model("Product", productSchema);
//create product
app.post("/api/v1/product/new", async (req, res) => {
const product = await Product.create(req.body);
console.log(req.body);
res.status(200).json({
success: true,
product,
});
});
//read product
app.get("/api/v1/products", async (req, res) => {
const products = await Product.find();
res.status(200).json({
success: true,
products,
});
});
//update product
app.put("/api/v1/product/:id", async (res, req) => {
let product = await Product.findById(req.params.id);
product = await Product.findByIdAndUpdate(req.params.id, req.body, {
new: true,
useFindAndModify: false,
runValidators: true,
});
res.status(200).json({
success: true,
product,
});
});
app.listen(4500, () => {
console.log("server is working");
});
【问题讨论】:
-
您是否能够执行您定义的获取或发布请求?
-
(res, req)- 应该是(req, res)!!! -
另外,您不需要“body-parser” - 如果您使用的是 express v4.16.0 或更高版本,您可以使用:
express.urlencoded()和express.json()。 -
好的,知道了,谢谢!
标签: javascript node.js mongodb express mongoose