ExpressJS require()加载顺序和Mongoose缺少ModelSchema

时间:2015-07-21 03:50:08

标签: node.js mongoose mean-stack

我正在学习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);
        }
    });
};

this tutorial on Scotch.io

获得了很大一部分生物传感器

2 个答案:

答案 0 :(得分:0)

我认为你错过了教程中的模型

你应该把它放在某个地方。

创建模型文件夹并添加todo.js并添加以下内容:

 // 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中注册,您将收到错误。