Postman调用PATCH请求失败,Express.js编写的对应接口无响应求排查
问题排查与修复方案
- 首先检查是否引入了文件操作模块
fs,以及在路由注册前是否配置了JSON请求体解析中间件:
你需要在代码的路由定义前添加以下配置,否则req.body无法解析,且调用fs方法会直接抛出未定义错误导致请求无响应:const fs = require('fs') const express = require('express') const app = express() // 必须添加这行解析JSON请求体 app.use(express.json()) - 修复
fs.writeFile的错误处理逻辑,当前代码完全没有处理文件写入异常,一旦出现权限不足、文件路径不存在、磁盘满等错误,回调不会执行返回逻辑,直接导致请求挂起无响应。同时原代码写入文件时传入了未修改的旧tours数组,属于逻辑错误需要修正:
写入逻辑修改为如下代码即可:fs.writeFile(`${__dirname}/dev-data/data/tours-simple.json`, // 替换为修改后的更新数组,否则文件不会保存更新后的数据 JSON.stringify(updatedTours), err => { // 新增错误判断分支,出现写入错误时直接返回响应 if(err) { return res.status(500).json({ status: 'error', message: '数据更新失败' }) } res.status(200).json({ status: 'success', data : updatedTour }); }) - 检查路由匹配顺序,确认
app.patch的路由定义没有被位置更靠前的同路径前缀路由拦截,比如前置的app.use('/api/v1/tours')中间件如果没有调用next(),也会导致请求无法到达PATCH路由逻辑,无返回响应。 - 确认
tours变量的初始化逻辑,如果你是通过异步fs.readFile读取的tours数据,必须等待读取完成后再注册PATCH路由,否则tours为undefined,执行find方法时会抛出未捕获异常,导致请求无响应。
内容的提问来源于stack exchange,提问作者Cassie Nguyen
相关产品推荐
相关产品推荐

