gpt4 book ai didi

node.js - 为什么我的 Node 应用程序在每次刷新后都会继续发送数据?

转载 作者:搜寻专家 更新时间:2023-11-01 00:16:42 25 4
gpt4 key购买 nike

我正在使用 node.js 和 express.js 构建一个非常简单的应用程序。我想读取目录的内容,当我浏览到 localhost:3000/names 时,应用程序会将一组内容打印到网页上,但我选择不打印的内容除外。这是我的代码:

const express = require('express');
const fs = require('fs');
const app = express();
const port = 3000;

let result = [];

app.get('/names', (req, res) => {
const printNames = (err, file) => {
file.forEach(e => {
if (e !== 'john') {
result.push(e);
}
});
res.send(result);
};

fs.readdir('./home', printNames);
});

app.listen(port, () => {
console.log('Listening on port 3000');
});

应用程序按我想要的方式运行,但有一个小错误。每次刷新页面时,应用程序都会将数组的相同内容添加到现有数组中。每次刷新时,我的数组都会越来越大。我希望应用程序将数组发送到页面并在我刷新时保持不变。我完全不知道为什么我的应用程序会这样。有人可以向我解释为什么它会这样吗?解决这个问题的正确步骤是什么?

最佳答案

这是因为您已经在全局范围内声明了您的result 数组。
您的 result 数组每次都变得越来越大。

只需将声明移动到您的路线,您应该没问题。

这应该可以正常工作:

const express = require('express');
const fs = require('fs');
const app = express();
const port = 3000;

// let result = []; Remove this line

app.get('/names', (req, res) => {
let result = []; // And add it here

const printNames = (err, file) => {
file.forEach(e => {
if (e !== 'john') {
result.push(e);
}
});
res.send(result);
};

fs.readdir('./home', printNames);
});

app.listen(port, () => {
console.log('Listening on port 3000');
});

在此处阅读有关 JavaScript 范围的更多信息:
https://www.w3schools.com/js/js_scope.asp

关于node.js - 为什么我的 Node 应用程序在每次刷新后都会继续发送数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45619708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com