node.js表示变量中的mvc方法名称

node.js表示变量中的mvc方法名称,node.js,model-view-controller,express,Node.js,Model View Controller,Express,我无法为控制器命名以加载我的模型: 我的app.js var express = require('express'); var app = express(); app.everyauth = require('everyauth'); app.mongoose = require('mongoose'); var fs = require('fs'); var config = require('./config.js')(app, express); //Include models

我无法为控制器命名以加载我的模型:

我的app.js

var express = require('express');
var app = express();
app.everyauth = require('everyauth');
app.mongoose = require('mongoose');

var fs = require('fs');

var config = require('./config.js')(app, express);

//Include models
var models = {};
fs.readdir(__dirname + '/models', function(err, files){
    if (err) throw err;
    files.forEach(function(file){
        var name = file.replace('.js', '');
        models.name = require('./models/' + name)(app.mongoose).model;
    });
});

//Include controllers
fs.readdir(__dirname + '/controllers', function(err, files){
    if (err) throw err;
    files.forEach(function(file){
        var name = file.replace('.js', '');
        require('./controllers/' + name)(app, models);
    });
});

app.listen(process.env.PORT || 3000);
例如,我在模型中有test.js

如果我想在数据库中查找某些内容,我希望执行以下操作:

models.test.find({}, function(err, docs){});
但它不起作用,因为测试是未知的,我应该这样做

models.name.find({}, function(err, docs){});
因此,我将用模型的名称替换名称

谢谢

试试这个

models[name] = require('./models/' + name)(app.mongoose).model;
如果要读取目录同步模式,可以使用

var models = {};
var files = fs.readdirSync(__dirname + '/models');
for(var i in files) {
  var name = files[i].replace('.js', '');
  models[name] = require('./models/' + name)(app.mongoose).model;
}

// Now, you can use
models.test

谢谢,但是我有一个问题,如果我使用console.log(models),我有:{test:{[Function:model]..但是当我尝试console.log(models['test'])或console.log(models.test)时我没有取消定义。您应该将测试模型用作
模型.test
。但是,请注意调用
模型的位置。test
因为
fs.readdir
异步。如果您想将其用作sync,可以使用
fs.readdirSync
功能。在您的情况下,您可以在
模型[name]=require之后调用
模型.test
('./models/'+name)(app.mongoose).model;
如果仍然不起作用,请用您尝试导入的模型更新您的问题。