gpt4 book ai didi

javascript - 浏览器刷新时重复数据 - Nodejs

转载 作者:行者123 更新时间:2023-11-30 16:09:44 24 4
gpt4 key购买 nike

我正在使用 Mustache和 Nodejs 将选项列表加载到我网站上的下拉框中。每次刷新页面时,我都会在下拉框中获得重复的数据。如何防止这种情况。我希望我的问题很清楚。

您可以在下面的 html 代码片段中看到我是如何使用 Mustache 的;

<div class="cd-filter-block">
<h4>Branches</h4>
<div class="cd-filter-content">
<div class="cd-select cd-filters">
<select class="filter" name="selectThis" type="radio" id="branches">
{{#branches}}
<option>{{name}}</option>
{{/branches}}
</select>
</div>
</div>
</div>

这是Nodejs代码;

var express = require('express');
var app = express();
var fs = require('fs');
var glob = require('glob');
var mustache = require('Mustache');
var mustacheExpress = require('mustache-express');

// Register '.mustache' extension with The Mustache Express
app.engine('mustache', mustacheExpress());
app.set('view engine', 'mustache');
app.set('views', __dirname + '/views');
app.use(express.static('public'));

//mustache templates
app.get('/', function(req, res){
var view = {
'branches' : listBranches(),
'gdc' : listFiles('../branches/BR/Desktop/other/'),
'san' : listFiles('../branches/BR/other/'),
'gmc' : listFiles('../branches/BR/Mobile/other/'),
'filter' : listFiles1('../branches/BR/Mobile/other/')
}
res.render('index', view);
});
3
//listBranches
var fs = require('fs');
var glob = require('glob');
var path = '../branches/other/' + '*';
var filelist = [];

function listBranches() {
var files = glob.sync(path).filter(isFolder);

for (var i = files.length - 1; i >= 0; i--) {
filelist.push({
name: files[i].split('/')[3],
});
};

return filelist;
}

function listFiles(path) {

var filelist2 = [];
var files = glob.sync(path + '**').filter(isFile);

for (var i = files.length -1; i >= 0; i--) {
filelist2.push({
"filename" : getFilename(files[i]),
"path" : files[i]
});
};

return filelist2;
}

function getFilename(path) {
var parts = path.split('/');
return parts[parts.length-1];
}

function isFolder(path) {
return fs.lstatSync(path).isDirectory();
}

function isFile(path) {
return fs.lstatSync(path).isFile();
}

//filters
function listFiles1(path) {
var filelist = [];
var files = glob
.sync(path + '**')
.filter(isFile);

for (var i = files.length - 1; i >= 0; i--) {
filelist.push(
{"filename" : createURL('test1','brand','test3','test4',getFilename(files[i])),
"path" : files[i]
});
console.log(createURL('test1','brand','test3','test4',getFilename(files[i])));
};

return filelist;
}

function isFile(path) {
return fs.lstatSync(path).isFile();
}

function getFilename(path) {
var parts = path.split('/');
return parts[parts.length-1];
}

function splitFile(file,part) {
var parts2 = file.split('.');
return parts2[part];

}



function createURL(filter1, filter2, filter3, section, file) {


var branch = filter1;
var brand = filter2;
var channel = filter3;


return 'http://' + '--' + channel + '.' + brand + '.' + 'local:8085' + '/' + '/' + file


}

//run app
app.listen(3000, function(){
console.log('App running on port 3000!')
});

最佳答案

每次在您的服务器上调用 listBranches() 时,您都会向 filelist 数组添加更多项目,因此项目将在该变量中累积,并且由于 listBranches () 返回那个变量,每次调用都会返回一个越来越长的数组。

我不完全清楚你的代码试图做什么,但你至少可以通过改变这个来解决这个问题:

var filelist = [];

function listBranches() {
var files = glob.sync(path).filter(isFolder);

for (var i = files.length - 1; i >= 0; i--) {
filelist.push({
name: files[i].split('/')[3],
});
};

return filelist;
}

为此:

function listBranches() {
var filelist = [];
var files = glob.sync(path).filter(isFolder);

for (var i = files.length - 1; i >= 0; i--) {
filelist.push({
name: files[i].split('/')[3],
});
};

return filelist;
}

请记住,服务器上的模块级或全局变量从一个请求持续到下一个请求,并由所有请求共享。因此,不要使用模块级变量,除非这是预期的行为。

关于javascript - 浏览器刷新时重复数据 - Nodejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36454057/

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