目前,我的Mongoose / NodeJS应用程序的/models/models.js文件中包含所有模型(架构定义)。
我想将它们分解成不同的文件,例如:user_account.js,profile.js等。但是,我似乎无法这样做,因为一旦我将这些类分开,我的控制器就会分解并报告“ 找不到模块 ”。
我的项目结构如下:
/MyProject /controllers user.js foo.js bar.js // ... etc, etc /models models.js server.js
我的models.js文件的内容如下所示:
var mongoose = require('mongoose'), Schema = mongoose.Schema, ObjectId = Schema.ObjectId; mongoose.connect('mongodb://localhost/mydb'); var UserAccount = new Schema({ user_name : { type: String, required: true, lowercase: true, trim: true, index: { unique: true } }, password : { type: String, required: true }, date_created : { type: Date, required: true, default: Date.now } }); var Product = new Schema({ upc : { type: String, required: true, index: { unique: true } }, description : { type: String, trim: true }, size_weight : { type: String, trim: true } });
我的user.js文件(控制器)如下所示:
var mongoose = require('mongoose'), UserAccount = mongoose.model('user_account', UserAccount); exports.create = function(req, res, next) { var username = req.body.username; var password = req.body.password; // Do epic sh...what?! :) }
如何将模式定义分成多个文件,并从我的控制器中引用它?当我确实引用它时(在新文件中之后),我得到这个错误:
错误:尚未为模型“ user_account”注册架构。
有什么想法吗?
这是一个样本 app/models/item.js
app/models/item.js
var mongoose = require("mongoose"); var ItemSchema = new mongoose.Schema({ name: { type: String, index: true }, equipped: Boolean, owner_id: { type: mongoose.Schema.Types.ObjectId, index: true }, room_id: { type: mongoose.Schema.Types.ObjectId, index: true } }); var Item = mongoose.model('Item', ItemSchema); module.exports = { Item: Item }
要从项目控制器中加载它,app/controllers/items.js我会这样做
app/controllers/items.js
var Item = require("../models/item").Item; //Now you can do Item.find, Item.update, etc
换句话说,在模型模块中定义模式和模型,然后仅导出模型。使用相对需求路径将模型模块加载到控制器模块中。
要建立连接,请在服务器启动代码(server.js或类似内容)的早期进行处理。通常,您需要从配置文件或环境变量中读取连接参数,如果未提供任何配置,则默认为开发模式localhost。
server.js
var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost');