我很高興得到一些幫助。
這是我的問題:
我已經用 node.js 構建了一個 Web 服務器,當通過某個路由請求時,它應該向客戶端發送一個 csv 檔案。csv 檔案是使用 fast-csv 包從 json 創建的。json 資料來自 mongoDB,并使用 mongoose 進行處理。當我請求此路線一次時,它作業正常。但是,當第二次請求時,會向客戶端發送一個空檔案。順便說一句,標頭正確地到達了客戶端。我必須重新啟動服務器才能再次下載我的檔案。
我嘗試了什么:
基本上,我現在已經忘記了我嘗試過的所有事情。使用郵遞員和通過瀏覽器查詢時都會發生此行為。我已經嘗試在我的處理函式中實作承諾。我試圖以某種方式取消訂閱 res(但是是的,這是一種愚蠢的方法)。我試圖將檔案寫入 fs 并在第二次請求時發送它。...
也許你們中的一個人一眼就能看出這里出了什么問題:
const { format } = require("@fast-csv/format");
const csvStream = format({ delimiter: ";", headers: true });
const router = express.Router();
router.route("/:collection/csv").get(requireModel, createCsv);
const csvFromDatabase = (data, res) => {
csvStream.pipe(res);
const processData = (data) => {
data.forEach((row) => {
const { _id, __v, ...newRow } = row._doc;
csvStream.write({ ...newRow });
});
csvStream.end();
};
processData(data);
};
const createCsv = async (req, res) => {
const { model } = req;
const items = await model.find({});
res.setHeader("Content-disposition", "attachment; filename=file.csv");
res.setHeader("Content-type", "text/html; charset=UTF-8");
csvFromDatabase(items, res);
};
非常感謝您的幫助。我希望我沒有用太愚蠢的問題讓你厭煩。
uj5u.com熱心網友回復:
您需要csvStream為每個新請求重新創建:
const csvFromDatabase = (data, res) => {
const csvStream = format({ delimiter: ";", headers: true });
csvStream.pipe(res);
…
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/485264.html
標籤:javascript 节点.js 表示 快速csv
上一篇:MongoDb查詢回傳空物件
