node.js - 使用 express、axios 和 fs.writeFileSync 导致 ERR_CONNECTION_REFUSED
问题描述
我有一个项目使用 express、axios 和 fs.writeFileSync 导致 ERR_CONNECTION_REFUSED 错误。
出于演示目的,我制作了这个 repo,架构/想法是相同的,但我无法复制相同的错误,但这只是为了让您了解我试图实现的目标。以下错误消息来自真实项目,但我对其进行了修改以与演示存储库保持一致。
在铬控制台
getDetail error Error: Network Error
at createError (createError.js:16)
at XMLHttpRequest.handleError (xhr.js:83)
xhr.js:178 GET http://localhost:3001/detail net::ERR_CONNECTION_REFUSED
dispatchXhrRequest @ xhr.js:178
xhrAdapter @ xhr.js:12
dispatchRequest @ dispatchRequest.js:52
Promise.then (async)
request @ Axios.js:61
Axios.<computed> @ Axios.js:76
wrap @ bind.js:9
(anonymous) @ detailApi.js:13
step @ tslib.es6.js:100
(anonymous) @ tslib.es6.js:81
(anonymous) @ tslib.es6.js:74
__awaiter @ tslib.es6.js:70
getDetail @ detailApi.js:4
runCallEffect @ redux-saga-core.esm.js:524
runEffect @ redux-saga-core.esm.js:1204
digestEffect @ redux-saga-core.esm.js:1271
next @ redux-saga-core.esm.js:1161
currCb @ redux-saga-core.esm.js:1251
runSelectEffect @ redux-saga-core.esm.js:731
runEffect @ redux-saga-core.esm.js:1204
digestEffect @ redux-saga-core.esm.js:1271
next @ redux-saga-core.esm.js:1161
currCb @ redux-saga-core.esm.js:1251
(anonymous) @ redux-saga-core.esm.js:481
exec @ redux-saga-core.esm.js:31
flush @ redux-saga-core.esm.js:87
asap @ redux-saga-core.esm.js:46
chan.put @ redux-saga-core.esm.js:375
(anonymous) @ redux-saga-core.esm.js:1412
dispatch @ VM99:1
在网络选项卡中
Headers
====
Request URL: http://localhost:3001/detail
Referrer Policy: strict-origin-when-cross-origin
Accept: */*
Access-Control-Request-Headers: authorization
Access-Control-Request-Method: GET
Origin: http://localhost:3000
Sec-Fetch-Mode: cors
下面的一些发现和代码
如果我删除 fs.writeFileSync 或将其更改为延迟循环,则不会出现网络错误。万事皆安。
使用 fs.writeSync 或 fs.writeFileSync 网络导致网络错误
const cors = require("cors");
const express = require("express");
const fs = require("fs");
const path = require("path");
const bodyParser = require("body-parser");
function server() {
const server = express();
server.use(cors());
server.use(bodyParser.json());
server.get("/detail", (req, res) => {
const data = require("./detail.json");
res.status(200).jsonp(data);
});
server.post("/agree", (req, res) => {
try {
const agree = req.body.agree;
const filePath = path.resolve(__dirname, "./agree.json");
let data = JSON.parse(fs.readFileSync(filePath));
data.agree = agree;
// * If I remove it or change it to a delay loop, no net work err
// * fs.writeSync or fs.writeFileSync network cause err
fs.writeFileSync(filePath, JSON.stringify(data));
res.status(200).jsonp({ success: true });
} catch (error) {
throw new Error("error", error);
}
});
return server;
}
module.exports = server;
解决方案
如果您使用的是 nodemon,在 writeFile() 之后它会重新启动所有内容。所以基本上 nodemon 正在监视更改,并且在文件更改时它将重新启动。如果您希望 nodemon 不会监视 json 文件(例如,在我的情况下)--ext js
在启动脚本上使用或检查此答案:看起来当我执行 fs.writeFile() 时,更改的文件会重新启动 nodemon。怎么让它不重启?
或尝试使用node server.js
推荐阅读
- windows-10 - 如何在启动 Eclipse 时禁用 Windows 10 反恶意软件服务
- javascript - 错误:在 Postman 中调用 Sabre CarAvailability 时“用户名值长度超过 20 个字符”
- javascript - 将回调附加到 onauthStateChanged 侦听器 firebase
- c# - WHERE 来自组合框的列名 = 值?
- matlab - 在点云中寻找点
- django - Django REST框架,内容协商
- scrapy - Scrapy - 空闲信号蜘蛛遇到错误
- r - 将 R 矩阵转换为 text2vec dtm
- css - chrome v73 css flex溢出问题
- tensorflow - 如何为 2D-CNN 预处理序列数据