我是新的堆栈溢出和新的开发...并一直在教自己的代码使用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属性在一个控制器?
2条答案
按热度按时间hjqgdpho1#
我的建议是改变代码的架构,这样每个单独的路径都有自己的控制器(与适当的模式模型一起工作)。
如果以后需要对模式模型执行任何其他数据库查询或任何其他操作,这会容易得多。
我想我明白您想要实现的目标,为所有getAll路由使用同一个控制器,但我不确定这是否是最好的解决方案。
另外,我建议你去看看仓库模式。关于代码架构,划分路由和控制器,以及所有节点js的最佳实践checkout this
hxzsmxv22#
创建一个模式而不对其进行配置,并将其全部导出到一个文件中,然后进行配置
您可以使用