在浏览器刷新上重复数据-Nodejs



我正在使用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;
}

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

最新更新