Postman无法接收Node.js后端响应问题求助
问题原因
你误用了fs.readFileSync和fs.writeFileSync这两个同步文件操作方法——同步方法不支持传入回调函数,你写的回调代码永远不会执行,导致res.send从未被调用,Postman自然收不到任何响应。另外,同步操作出错时会直接抛出未捕获的异常,也会导致请求挂起或服务器崩溃。
修正方案
方案1:改用异步文件操作(推荐)
异步操作不会阻塞服务器主线程,更适合后端服务场景:
import express from 'express'; import * as fs from 'fs'; import { dirname } from 'path'; import { fileURLToPath } from 'url'; import bodyParser from "body-parser"; import cors from "cors"; const app = express(); const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); app.use(cors()); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.post("/register", function(req, res) { // 异步读取文件 fs.readFile(__dirname + "/users.json", 'utf8', function (err, data) { if (err) { return res.send(JSON.stringify("error")); } try { const users = JSON.parse(data); users["users"].push(req.body); // 异步写入文件 fs.writeFile(__dirname + "/users.json", JSON.stringify(users), 'utf8', function (err) { if (err) { return res.send(JSON.stringify("error")); } res.send(JSON.stringify("Created")); }); } catch (parseErr) { res.send(JSON.stringify("error: invalid json format")); } }); }); const server = app.listen(8081, function() { console.log("server start running"); });
方案2:修复同步操作的写法
如果一定要用同步操作,需去掉回调,改用try/catch捕获所有异常:
import express from 'express'; import * as fs from 'fs'; import { dirname } from 'path'; import { fileURLToPath } from 'url'; import bodyParser from "body-parser"; import cors from "cors"; const app = express(); const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); app.use(cors()); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.post("/register", function(req, res) { try { // 同步读取直接返回结果 const data = fs.readFileSync(__dirname + "/users.json", 'utf8'); const users = JSON.parse(data); users["users"].push(req.body); // 同步写入无返回值,出错直接抛异常 fs.writeFileSync(__dirname + "/users.json", JSON.stringify(users), 'utf8'); res.send(JSON.stringify("Created")); } catch (err) { // 捕获读取、解析、写入全流程异常 res.send(JSON.stringify("error")); } }); const server = app.listen(8081, function() { console.log("server start running"); });
额外注意
- 确保
users.json初始格式正确,比如内容为{"users": []},否则JSON.parse会报错。 - Postman请求需选择
POST方法,请求体切换为raw->JSON格式,避免格式不匹配导致解析失败。
内容的提问来源于stack exchange,提问作者tekblade
相关产品推荐
相关产品推荐

