Node.js Express中的修补程序路由/终结点不工作
您好,我已经为一个不工作的api端点编写了以下路由。当我使用Postman和我的代码进行测试时,它只是一个404NotFound错误Node.js Express中的修补程序路由/终结点不工作,node.js,mongodb,api,express,Node.js,Mongodb,Api,Express,您好,我已经为一个不工作的api端点编写了以下路由。当我使用Postman和我的代码进行测试时,它只是一个404NotFound错误 router.patch("/favorite", async (req, res) => { user = await User.findById(req.body.id) if (user == null) { return res.status(404).json({ message: 'Cannot find us
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上测试时,它是一个无限循环,调用被挂起。我在控制台中还收到以下警告:
(节点:36447)未处理的PromisejectionWarning:未处理的承诺拒绝。此错误源于在没有catch块的异步函数中抛出,或者拒绝未使用.catch()处理的承诺。要在未处理的承诺拒绝时终止节点进程,请使用CLI标志--unhandled rejections=strict
(请参阅)。(拒绝id:1)
及
(节点:36447)[DEP0018]弃用警告:未处理的承诺拒绝已弃用。将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程。根据警告,您的承诺中存在未捕获的失败代码。也许在这行user=wait user.findById(req.body.id)
您的HTTP请求是什么样子的?API的基本url是什么?这应该在您的index.js
或您正在使用的任何入口点中定义。它应该类似于https://localhost:3000/api/favorite
我注意到您的帖子和评论中的端口不同(3000 v 5000)。server.js中是否包含router.patch
?很抱歉,我犯了另一个错误,我想在评论中写localhost:5000/users/favorite。不,我在users.js的routes文件夹下有router.patch和其他HTTP方法/路由。Server.js只有应用程序。listen
,端口,并与mongoDBWhen您点击端点时看到的是404吗<代码>返回res.status(404).json({message:'找不到用户'})}
。根据您发布的内容,代码看起来是正确的。谢谢,我所做的只是将所有内容都放在“try”括号内。但是,现在我有一个错误“无法设置未定义的'favPokemon'的属性”,所以我现在要解决这个问题!