Express中的PATCH路由/端点不起作用
Posted
技术标签:
【中文标题】Express中的PATCH路由/端点不起作用【英文标题】:PATCH route/endpoint in Express not working 【发布时间】:2021-08-21 04:14:00 【问题描述】:您好,我为一个不起作用的 api 端点编写了以下路由。当我使用 Postman 和我的代码进行测试时,它只是一个 404 not found 错误。
router.patch("/favorite", async (req, res) =>
user = await User.findById(req.body.id)
if (user == null)
return res.status(404).json( message: 'Cannot find user' )
if (req.body.putArr != null)
res.user.favPokemon = req.body.putArr;
try
const updatedUser = await res.user.save();
console.log(res.user.favPokemon);
console.log(updateUser);
res.json(updatedUser);
catch (err)
res.status(400).json( error: err.message );
);
我遗漏了什么/我的代码中有什么错误?作为参考,这是我为用户设置的 mongoDB:
编辑:很抱歉没有指定端点。更清楚地说,调用它的端点和代码是:
const favThis = async (e) => // Patch method to favorite or unfavorite a pokemon
debugger;
e.preventDefault();
try
console.log(putArr);
const newUser = userID, putArr;
await axios.patch("http://localhost:5000/users/favorite", newUser);
catch(err)
err.response.data.msg && setError(err.response.data.msg)
;
,所以它是http://localhost:5000/users/favorite
。我有其他端点工作正常,例如http://localhost:5000/users/login
和http://localhost:5000/users/register
,在server.js
里面我有app.use("/users", require("./routes/users"));
另外,server.js 很简单
const express = require("express");
const mongoose = require("mongoose");
const cors = require("cors");
require("dotenv").config();
// set up express
const app = express();
app.use(express.json());
app.use(cors());
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => console.log(`The server has started on port: $PORT`));
// set up mongoose
mongoose.connect(
process.env.MONGODB_CONNECTION_STRING,
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
,
(err) =>
if (err) throw err;
console.log("MongoDB connection established");
);
// set up routes
app.use("/users", require("./routes/users"));
app.use("/todos", require("./routes/todo"));
编辑 2::我现在注意到,当我在 Postman 上进行测试时,它是一个无限循环并且调用被挂起。我还在控制台中收到以下警告:
(node:36447) UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。要在未处理的 Promise 拒绝时终止节点进程,请使用 CLI 标志 --unhandled-rejections=strict
(请参阅 https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。 (拒绝编号:1)
和
(node:36447) [DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。
【问题讨论】:
你的 HTTP 请求是什么样的? 您的 API 的基本 URL 是什么?这应该在您的index.js
或您使用的任何入口点中定义。它应该类似于https://localhost:3000/api/favorite
我注意到您的帖子与评论中的端口不同(3000 v 5000)。 router.patch
是否包含在 server.js
中?
对不起,我又犯了一个错误,我的意思是在评论中写 localhost:5000/users/favorite。不,我在路由文件夹下的 users.js 中有 router.patch 以及我的其他 HTTP 方法/路由。 Server.js 只是有app.listen
,端口,并与mongoDB连接
当您到达端点时,您看到的是 404 吗? return res.status(404).json( message: 'Cannot find user' )
。根据您发布的内容,代码看起来是正确的。
【参考方案1】:
根据警告,您在未捕获的 Promise 中有失败的代码。也许在这一行user = await User.findById(req.body.id)
。
Getting a UnhandledPromiseRejectionWarning when testing using mocha/chai
【讨论】:
谢谢,我所做的只是将所有东西都放在“try”大括号内。但是,现在我有错误“无法设置未定义的 'favPokemon' 的属性”,所以我现在就解决这个问题!以上是关于Express中的PATCH路由/端点不起作用的主要内容,如果未能解决你的问题,请参考以下文章
使用 Express/Passport、AngularJS 和 ensureLoggedIn 的身份验证和路由在“/”url 上不起作用
Passport req.logOut() 函数不起作用? [复制]