我想把我的mongoose 模型放在一个单独的文件里.我试图这样做:

var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;

var Material = new Schema({
    name                :    {type: String, index: true},
    id                  :    ObjectId,
    materialId          :    String,
    surcharge           :    String,
    colors              :    {
        colorName       :    String,
        colorId         :    String,
        surcharge       :    Number
    }
});

var SeatCover = new Schema({
    ItemName            :    {type: String, index: true},
    ItemId              :    ObjectId,
    Pattern             :    String,
    Categories          :    {
        year            :    {type: Number, index: true},
        make            :    {type: String, index: true},
        model           :    {type: String, index: true},
        body            :    {type: String, index: true}
    },
    Description         :    String,
    Specifications      :    String,
    Price               :    String,
    Cost                :    String,
    Pattern             :    String,
    ImageUrl            :    String,
    Materials           :    [Materials]
});

mongoose.connect('mongodb://127.0.0.1:27017/sc');

var Materials = mongoose.model('Materials', Material);
var SeatCovers = mongoose.model('SeatCover', SeatCover);

exports.Materials = Materials;
exports.SeatCovers = SeatCovers;

然后,我try 使用这样的模型:

var models = require('./models'); 

exports.populateMaterials = function(req, res){
    console.log("populateMaterials");
    for (var i = 0; i < materials.length; i++ ){
        var mat = new models.Materials();
        console.log(mat);
        mat.name = materials[i].variantName;
        mat.materialId = materials[i].itemNumberExtension;
        mat.surcharge = materials[i].priceOffset;
        for (var j = 0; j < materials[i].colors.length; j++){
            mat.colors.colorName = materials[i].colors[j].name;
            mat.colors.colorId = materials[i].colors[j].itemNumberExtension;
            mat.colors.surcharge = materials[i].colors[j].priceOffset;
        }
        mat.save(function(err){
            if(err){
                console.log(err);
            } else {
                console.log('success');
            }
        });
    }
    res.render('index', { title: 'Express' });
};

这是在单独模块中引用模型的合理方法吗?

推荐答案

基本方法看起来是合理的.

作为一个选项,您可以考虑一个"提供者"模块,它集成了模型和控制器功能.这样你就可以拥有这个应用了.js实例化提供者,然后所有控制器功能都可以由它执行.应用程序.js只需指定带有要实现的相应控制器功能的路由.

为了进一步整理,你也可以考虑将路由Forking 成一个单独的应用程序模块.js是这些模块之间的粘合剂.

Node.js相关问答推荐

GraphQL MongoDB Mongoose填充字段未获取多个类别

Firebase-admin筛选器.或只考虑第一个WHERE子句

无法从MongoDB文档中保存的对象数组中获取对象的属性

如何在 ElectronJS 中播放音频文件

将 POST 的 json 变量格式化为 lambda

我应该转译我的 TypeScript 应用程序吗?

BrowserRouter 无法渲染组件

在系统启动时启动本地 node 服务器

如何解决这个关于 TaskRunner 的 Node/Express 代码问题?

如何从哪个应用程序用户中找到在 Firebase 身份验证中进行身份验证的用户

BrowserRouter工作时为什么HashRouter不工作?

Mongodb聚合传递一个匹配的数组和一个不匹配的数组

使用新react 18.0.0 的 create-react-app my-app redux 错误

响应发送 200 而不是 403

无服务器无法获取所有记录事件对象验证失败?

npm WARN 不推荐使用 graceful-fs@3.0.8:graceful-fs 版本 3

处理快速异步中间件中的错误

在 Node.js 中获取终端的宽度

expressjs app.VERB 调用中的 next() 和 next('route') 有什么区别?

用于轻松部署和更新的 Node.js 设置