首页 > 解决方案 > 使用 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

下面的一些发现和代码

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;

标签: node.jsreactjsexpressreduxredux-saga

解决方案


如果您使用的是 nodemon,在 writeFile() 之后它会重新启动所有内容。所以基本上 nodemon 正在监视更改,并且在文件更改时它将重新启动。如果您希望 nodemon 不会监视 json 文件(例如,在我的情况下)--ext js在启动脚本上使用或检查此答案:看起来当我执行 fs.writeFile() 时,更改的文件会重新启动 nodemon。怎么让它不重启?

或尝试使用node server.js


推荐阅读