NodeJS API 响应在 fs.writefile 后失败
NodeJS API response fails after fs.writefile
我创建了一个API,我想创建一个文件,在写入文件后,请求一个日志API,在它的响应之后,相对于用户的响应。
我已经简化了这样的代码:
const express = require('express');
const router = express.Router();
const fetch = require("node-fetch");
const util = require('util');
const fs = require("fs-extra")
router.get('/works/', (req, res) => {
logData(res)
})
router.get('/fails/', (req, res) => {
let t = Date.now();
const writeFile = util.promisify(fs.writeFile)
writeFile(`./data/${t}.json`, 'test').then(function(){
logData(res)
})
})
function logData(res) {
return new Promise(resolve => {
fetch('https://webhook.site/44dad1a5-47f6-467b-9088-346e7222d7be')
.then(response => response.text())
.then(x => res.send('x'));
});
}
module.exports = router
/works/ API 工作正常,
但是 /fails/API 失败并显示 错误:读取 ECONNRESET
OP 在评论中澄清说他使用 nodemon
到 运行 此代码。
问题是 nodemon
也在监视 .json
文件并重新启动服务器。因此更改 JSON 文件的请求失败并显示 Error: read ECONNRESET
.
要防止 nodemon
在更改 .json
文件时重新启动服务器,请参阅 this。
例如可以添加nodemon.json
configuration file忽略./data
目录(添加此文件后一定要重启nodemon
):
{
"ignore": ["./data"]
}
我创建了一个API,我想创建一个文件,在写入文件后,请求一个日志API,在它的响应之后,相对于用户的响应。
我已经简化了这样的代码:
const express = require('express');
const router = express.Router();
const fetch = require("node-fetch");
const util = require('util');
const fs = require("fs-extra")
router.get('/works/', (req, res) => {
logData(res)
})
router.get('/fails/', (req, res) => {
let t = Date.now();
const writeFile = util.promisify(fs.writeFile)
writeFile(`./data/${t}.json`, 'test').then(function(){
logData(res)
})
})
function logData(res) {
return new Promise(resolve => {
fetch('https://webhook.site/44dad1a5-47f6-467b-9088-346e7222d7be')
.then(response => response.text())
.then(x => res.send('x'));
});
}
module.exports = router
/works/ API 工作正常,
但是 /fails/API 失败并显示 错误:读取 ECONNRESET
OP 在评论中澄清说他使用 nodemon
到 运行 此代码。
问题是 nodemon
也在监视 .json
文件并重新启动服务器。因此更改 JSON 文件的请求失败并显示 Error: read ECONNRESET
.
要防止 nodemon
在更改 .json
文件时重新启动服务器,请参阅 this。
例如可以添加nodemon.json
configuration file忽略./data
目录(添加此文件后一定要重启nodemon
):
{
"ignore": ["./data"]
}