node.js - 我正在使用 Nodejs/express + mongoDB,我的 http PUT 请求根本没有通过
问题描述
因此,我正在学习赫尔辛基全栈课程,如果我们在字段中包含相同的姓名,则有一项任务是创建一个 put 请求以更新联系人的电话号码。但不同的号码。
我写的所有请求都运行良好,我正在本地测试它们,并且还使用 VScode 的邮递员和 REST 扩展。但是当我写这个 put 请求时,它甚至没有记录错误,就好像我什至没有调用它一样。当我在名称字段中写入名称时 - 如果名称已经存在于数据库中,它应该只更新我在数字字段中写入的数字,所以当我这样做时,什么都不会发生。
const express = require("express");
const morgan = require("morgan");
const app = express();
const cors = require("cors");
const Contact = require("./models/contact");
app.use(cors());
app.use(express.json());
app.use(express.static("build"));
morgan.token("logger", (req, res) => {
if (req.method === "POST") {
return JSON.stringify(req.body);
}
});
app.use(
morgan(
":method :url :status :res[content-length] - :response-time ms :logger"
)
);
//Handle errors for the HTTP requests
const errorHandler = (error, request, response, next) => {
console.error(error)
if (error.name === 'CastError') {
return response.status(404).send({error: 'wrong id number'})
}
next(error)
}
//Logs the requests to the console
const requestLogger = (request, response, next) => {
console.log("Method:", request.method);
console.log("Path: ", request.path);
console.log("Body: ", request.body);
console.log("---");
next();
};
app.use(requestLogger);
//add new posts to the database
app.post("/api/persons", (request, response) => {
const body = request.body;
if (!body.name || !body.number) {
response.status(404).json({
error: "content not found",
});
}
const contact = new Contact({
name: body.name,
number: body.number,
})
contact.save().then((savedContact) => response.json(savedContact));
});
app.put('/api/persons/:id', (request, response, next) => {
const body = request.body
const id = request.params.id;
const contact = {
number: body.number
}
Contact.findByIdAndUpdate(id, contact, {new: true})
.then(updatedContact => {
response.json(updatedContact)
})
.catch(error => next(error))
})
//Instructions for the response if the /api/persons route is requested.
app.get("/api/persons", (request, response) => {
Contact.find({}).then(result => response.json(result))
});
// If the /info route is requested
app.get("/info", (request, response) => {
const inf = `<h1>Phonebook has info of ${Contact.length} People</h1>`;
const tme = new Date().toUTCString();
response.write(inf);
response.write(`<h2>${tme}</h2>`);
response.end();
});
// If the /api/persons/:id is requested
app.get("/api/persons/:id", (request, response) => {
Contact.findById(request.params.id)
.then(contact => response.json(contact))
});
//delete posts using the requested id
app.delete("/api/persons/:id", (request, response, next) => {
Contact.findByIdAndRemove(request.params.id)
.then(result => {
response.status(204).end();
})
.catch(error => next(error))
});
const unknownEndpoint = (request, response) => {
response.status(404).send({ error: "unknown endpoint" });
};
app.use(unknownEndpoint);
app.use(errorHandler);
const PORT = process.env.PORT;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
^这是 index.js 文件
const mongoose = require('mongoose');
const url = process.env.MONGODB_URI;
console.log('connecting to the database', url);
mongoose
.connect(url, {
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false,
useCreateIndex: true,
})
.then((result) => {
console.log("connected to MongoDB");
})
.catch((error) => {
console.log("error connecting to MongoDB:", error.message);
});
const contactSchema = new mongoose.Schema({
name: String,
number: String
});
contactSchema.set('toJSON', {
transform: (document, returnedObject) => {
returnedObject.id = returnedObject._id.toString();
delete returnedObject._id;
delete returnedObject.__v;
}
});
module.exports = mongoose.model('Contact', contactSchema);
解决方案
推荐阅读
- cordova - 如何在用户处于屏幕锁定状态(离子)时触发事件?
- swagger - 如何在 APIGateway/Swagger 中将响应 Header Content-Type 设置为 application/xml
- pandas - 使用 sumifs 将列添加到 pandas DF
- linux - Yocto - 如何将空目录添加到文件树
- c++ - 在通知未知线程数的条件变量中避免错误唤醒
- r - 映射功能时出错/当我逐个手动运行它时工作正常;为什么?
- c# - 异步任务控制器未重定向到操作
- python - Python:通过双循环填充列表列表?
- wordpress - 寻找项目经理和报价请求系统的 WordPress 插件
- php - PHP - 管理 curl 输出