【发布时间】:2015-10-10 08:59:26
【问题描述】:
我正在学习 MEAN 堆栈,发现自己遇到了一个似乎没有意义的加载顺序问题。
下面的代码显示了我的 server.js 加载路由文件,该文件又为模型拉入控制器,这反过来又需要模型本身。
如果我不包含对来自 routes.js 的模型的引用,我会在启动服务器时收到 MissingSchemeError。为什么?我是否遗漏了有关加载资源的内容?
我的理解是,在尝试运行任何代码之前,文件的导出将由 require() 完全导入。
server.js
// modules =================================================
var express = require('express');
var bodyParser = require('body-parser');
var methodOverride = require('method-override');
var mongoose = require('mongoose');
var morgan = require('morgan');
var app = express();
// configuration ===========================================
// config files
var db = require('./config/db');
// set our port
var port = process.env.PORT || 8080;
// connect to our mongoDB database
mongoose.connect(db.url);
// get all data/stuff of the body (POST) parameters
// parse application/json
app.use(bodyParser.json());
// parse application/vnd.api+json as json
app.use(bodyParser.json({ type: 'application/vnd.api+json' }));
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: true }));
// override with the X-HTTP-Method-Override header in the request. simulate DELETE/PUT
app.use(methodOverride('X-HTTP-Method-Override'));
// set the static files location /public/img will be /img for users
app.use(express.static(__dirname + '/public'));
// set morgan to log requests
app.use(morgan('dev'));
// routes ==================================================
require('./app/routes')(app);
routes.js
//this line is the problem. why is this needed?
var Customer = require('./models/customer'); // <--
var customers = require('./controllers/customer-server-controller');
module.exports = function(app) {
app.route('/api/customers')
.get(customers.list);
//.post(customer.create);
}
客户服务器控制器.js
var mongoose = require('mongoose');
var Customer = mongoose.model('Customer');
/**
* List of Customers
*/
exports.list = function(req, res) {
Customer.find().sort('-created').exec(function(err, customers) {
if (err) {
return res.status(400).send({
message: "ERROR: " + err
});
} else {
res.jsonp(customers);
}
});
};
从this tutorial on Scotch.io 获得了很大一部分生物板
【问题讨论】:
-
为什么在 routes.js 中还需要 Customer 模型?您只需要在客户控制器中使用它。
标签: node.js mongoose mean-stack