我正在学习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);
}
客户 - 服务器 - controller.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);
}
});
};
获得了很大一部分生物传感器
答案 0 :(得分:0)
我认为你错过了教程中的模型
你应该把它放在某个地方。
// define model =================
var Todo = mongoose.model('Todo', {
text : String
});
答案 1 :(得分:0)
你的customer-server-controller.js
没有require()
模型文件,它只是试图通过询问Mongoose来引用模型(Mongoose不会为你加载模型文件!):
var Customer = mongoose.model('Customer');
您需要require()
来自控制器的模块文件,否则模型未在Mongoose中注册,您将收到错误。