node.js表示变量中的mvc方法名称
我无法为控制器命名以加载我的模型: 我的app.jsnode.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
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;
如果仍然不起作用,请用您尝试导入的模型更新您的问题。