mongoose 快速Javascript:有没有办法为控制器设置模式属性?

mklgxw1f  于 2022-11-30  发布在  Go
关注(0)|答案(2)|浏览(144)

我是新的堆栈溢出和新的开发...并一直在教自己的代码使用React和表达...所以,道歉,如果这个问题是根本上不合理的...我有基本的差距,我的知识:)
我在mongoDB中有一堆(可能会增加25个以上)集合,每个集合都有一个mongoose定义的模式,该模式对每个集合都是唯一的。
Express API端点如下所示,后缀与集合相关:

  • 我的模式...
  • 等等

我目前正在重构代码,以剥离控制和路由代码。我在路由路径中的动词后附加了逻辑--这是可行的,但混乱和麻烦,并限制了重用+调试和更新是一个痛苦,所以我正在拆分控制器逻辑。
对于每个集合/ API端点,我都将通用URL/ API函数应用于每个路由:

  • 获取全部
  • 查找依据名称
  • summary(过滤掉不想显示的属性)
  • 等等

如果我们使用下面的示例代码:

const mySchema = require('../models/mySchema'),
const mySchema1 = require('../models/mySchema1'),
const mySchema2 = require('../models/mySchema2'),
const mySchema3 = require('../models/mySchema3'),
const mySchema4 = require('../models/mySchema4'),
const mySchema5 = require('../models/mySchema5'),
const mySchema6 = require('../models/mySchema6'),

const getAll = (req, res) => {
  console.log('Request made to Fetch assets data')
    try {
        mySchema.find()
        then((resultsFound) => res.json(resultsFound))
        console.log('Results Found are', resultsFound)
        } catch (error) {
            next(err) //In-Built Express error Handling
        }
}

是否有一种方法可以使模式名称可变化,以便此控制器代码可以跨mySchema、mySchema 1、mySchema 2等的模式定义应用...
我真的只尝试过手动模板化配置。
我想到的一个实现此目的的方法是从请求中去掉URL的后缀,并将其设置为变量......但这有一个有限的用例,它只解决那些模式定义驻留在URL中相同位置的示例。
有没有一个更可扩展的方法使用的东西,我不知道,可能不会理解这将实现这种动态scheam属性在一个控制器?

hjqgdpho

hjqgdpho1#

我的建议是改变代码的架构,这样每个单独的路径都有自己的控制器(与适当的模式模型一起工作)。
如果以后需要对模式模型执行任何其他数据库查询或任何其他操作,这会容易得多。
我想我明白您想要实现的目标,为所有getAll路由使用同一个控制器,但我不确定这是否是最好的解决方案。
另外,我建议你去看看仓库模式。关于代码架构,划分路由和控制器,以及所有节点js的最佳实践checkout this

hxzsmxv2

hxzsmxv22#

创建一个模式而不对其进行配置,并将其全部导出到一个文件中,然后进行配置

const { model } = require('mongoose');
const mySchema = require('../models/mySchema')
const mySchema1 = require('../models/mySchema1')
const mySchema2 = require('../models/mySchema2')
const mySchema3 = require('../models/mySchema3')
const mySchema4 = require('../models/mySchema4')

export default allModels = {
    modelName: model("modelName", mySchema),
    modelName: model("modelName", mySchema1),
    modelName: model("modelName", mySchema2),
    modelName: model("modelName", mySchema3),
    modelName: model("modelName", mySchema4),
}

您可以使用

import model.myschema1 from './path of those models' || 
import model.myschema1 as myschema1 from './path of those models'

相关问题