【问题标题】:Getting req.params.id undefined when making a put request发出 put 请求时获取 req.params.id 未定义
【发布时间】: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


【解决方案1】:

req 对象表示 HTTP 请求,并具有请求查询字符串、参数、正文和 HTTP 标头的属性。 res 对象表示 Express 应用在收到 HTTP 请求时发送的 HTTP 响应。

所以,首先我们要传递req 对象,然后传递res

改变这个

app.put("/api/v1/product/:id", async (res, req) => {
let product = await Product.findById(req.params.id);

app.put("/api/v1/product/:id", async (req, res) => {
let product = await Product.findById(req.params.id);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2018-03-10
    • 2019-08-10
    相关资源
    最近更新 更多