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

时间:2016-04-06 14:24:25

标签: javascript node.js mustache

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

1 个答案:

答案 0 :(得分:2)

每次在您的服务器上调用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;
}

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