使用 through2-map 使用 nodejs 创建的服务器中的“结束后写入”错误
“write after end” error in a server made with nodejs using through2-map
第一个API请求成功发送响应。但是,当我执行另一个 GET 请求时,出现错误 "write after end"。
当我关闭 .pipe(addThing)
时,它会在连续调用时起作用。
through2-map 函数是否以某种方式结束了连接或响应?
const fs = require('fs');
const express = require("express");
const route = express.Router();
const map = require("through2-map")
const csv2json = require("csv2json");
const firstThreeDigits = new RegExp(/[\s]*\d{3}/);
route.get("/", function(_, res){
fs.createReadStream('./data/data.csv')
.pipe(addThing)
.pipe(csv2json({
separator: ';'
}))
.pipe(res)
});
const addThing = map(function (chunk) {
const chunkArr = chunk.toString().split('\n');
const chunkWithNumber = chunkArr.map((line, index) => {
if (index === 0) {
return 'Number;' + line
}
return firstThreeDigits.exec(line) + ';' + line
})
return chunkWithNumber.toString().split(',').join("\n")
});
module.exports = route;
不确定是否相关,但 csv:
./data/data.csv
Thing;Latitude;Longitude
FOO-123 Banana;52.09789;3.113278
BAR-456 Monocle;52.034599;5.11235
阅读 后我注意到问题可能是变量 addThing
不是在每次连续调用时都创建新的。
在内存中分配。
所以解决方案:
fs.createReadStream('./data/cameras-defb.csv')
.pipe(map(addThing))
.pipe(csv2json({
separator: ';'
}))
.pipe(res);
function addThing(chunk) {
const chunkArr = chunk.toString().split('\n');
const chunkWithNumber = chunkArr.map((line, index) => {
if (index === 0) {
return 'Number;' + line
}
return firstThreeDigits.exec(line) + ';' + line
})
return chunkWithNumber.toString().split(',').join("\n")
})
第一个API请求成功发送响应。但是,当我执行另一个 GET 请求时,出现错误 "write after end"。
当我关闭 .pipe(addThing)
时,它会在连续调用时起作用。
through2-map 函数是否以某种方式结束了连接或响应?
const fs = require('fs');
const express = require("express");
const route = express.Router();
const map = require("through2-map")
const csv2json = require("csv2json");
const firstThreeDigits = new RegExp(/[\s]*\d{3}/);
route.get("/", function(_, res){
fs.createReadStream('./data/data.csv')
.pipe(addThing)
.pipe(csv2json({
separator: ';'
}))
.pipe(res)
});
const addThing = map(function (chunk) {
const chunkArr = chunk.toString().split('\n');
const chunkWithNumber = chunkArr.map((line, index) => {
if (index === 0) {
return 'Number;' + line
}
return firstThreeDigits.exec(line) + ';' + line
})
return chunkWithNumber.toString().split(',').join("\n")
});
module.exports = route;
不确定是否相关,但 csv:
./data/data.csv
Thing;Latitude;Longitude
FOO-123 Banana;52.09789;3.113278
BAR-456 Monocle;52.034599;5.11235
阅读 addThing
不是在每次连续调用时都创建新的。
在内存中分配。
所以解决方案:
fs.createReadStream('./data/cameras-defb.csv')
.pipe(map(addThing))
.pipe(csv2json({
separator: ';'
}))
.pipe(res);
function addThing(chunk) {
const chunkArr = chunk.toString().split('\n');
const chunkWithNumber = chunkArr.map((line, index) => {
if (index === 0) {
return 'Number;' + line
}
return firstThreeDigits.exec(line) + ';' + line
})
return chunkWithNumber.toString().split(',').join("\n")
})