【发布时间】:2018-10-01 15:43:07
【问题描述】:
我有几个具有相同文档类型的集合,但语言除外。 比如说imagesES、imagesEN、imagesFR等等......
我只是想定义一个模式,但也定义一个模型,通过参数获得正确的集合:
var mongoose = require('mongoose')
var Schema = mongoose.Schema
let authorSchema = require('./Authors').authorSchema
const imageSchema = new Schema({
authors: [authorSchema],
status: Number, // published (1), unpublished (0)
created: { type: Date, default: Date.now },
lastUpdated: { type: Date, default: Date.now },
license: {
type: String,
enum: ['Creative Commons BY-NC-SA'], //just one license right now
default: 'Creative Commons BY-NC-SA'
},
downloads: {
type: Number,
default: 0
},
tags: [String]
})
module.exports = locale => {
return mongoose.model('Image', imageSchema, `image${locale}`)
}
但是在控制器中,我应该需要控制器内部的模型(当我知道语言环境时):
getImageById: (req, res) => {
const id = req.swagger.params.id.value
const locale = req.swagger.params.locale.value
const Images = require('../models/Images')(locale)
Images.findOne({_id: id}).lean().exec( (err, image) => {
我不确定这是否是正确的方法,因为我收到的每个请求都必须(同步)需要模型模块,或者我应该在函数中使用之前需要所有不同的模型。
const locales = ['es', 'en', 'fr']
const Images = []
locales.map(locale=>Images[locale] = require('../models/Images')(locale))
getImageById: (req, res) => {
const id = req.swagger.params.id.value
const locale = req.swagger.params.locale.value
Images[locale].findOne({_id: id}).lean().exec( (err, image) => {
【问题讨论】:
-
问题是什么?如果您只想问“这样可以吗”,那么您应该在codereview.stackexchange.com 上发帖。
-
添加了我想的两种方式。不知道codereview
标签: node.js mongodb mongoose node-modules