[英]How can I fix a memory problem in node.js?
我收到以下錯誤。 正如我檢查的那樣,由於服務器內存不足,似乎json文件太大而無法運行。
我們如何解決這個問題? 有一個叫做Node流的東西,這讓我很難理解。 您能更輕松地解釋它嗎?
server.js
const express = require('express');
const cors = require('cors');
const userJson = require('./user');
const locationJson = require('./location');
const API_PORT = process.env.PORT || 3002;
const app = express();
app.use(cors());
const router = express.Router();
router.get("/getUserData", (req, res) => {
return res.json(userJson);
});
router.get("/getLocationData", (req, res) => {
return res.json(locationJson);
});
app.use("/api", router);
app.listen(API_PORT, () => console.log(`LISTENING ON PORT ${API_PORT}`));
錯誤訊息
buffer.js:585
if (encoding === 'utf8') return buf.utf8Slice(start, end);
^
Error: Cannot create a string longer than 0x3fffffe7 characters
at stringSlice (buffer.js:585:43)
at Buffer.toString (buffer.js:655:10)
at Object.readFileSync (fs.js:392:41)
at Object.Module._extensions..json (internal/modules/cjs/loader.js:816:22)
at Module.load (internal/modules/cjs/loader.js:666:32)
at tryModuleLoad (internal/modules/cjs/loader.js:606:12)
at Function.Module._load (internal/modules/cjs/loader.js:598:3)
at Module.require (internal/modules/cjs/loader.js:705:19)
at require (internal/modules/cjs/helpers.js:14:16)
at Object.<anonymous> (/Users/k/Desktop/dev/backend/location.js:1:22)
您可以流式傳輸文件並將其直接pipe()到res中:
const fs = require('fs');
const path = require('path');
const getBigJson = (req, res, next) => {
const pathToJson = path.join(__dirname, 'path/to/file');
const jsonStream = fs.createReadStream(pathToJson);
res.set({'Content-Type': 'application/json'});
jsonStream.pipe(res);
};
它應該逐塊發送它,而不會耗盡您的內存。
參見https://github.com/substack/stream-handbook以獲得關於流的良好解釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.