Express Router中的动态更改模型/模式
我有一个快递服务器,它接受api调用并将它们指向特定的路由。
app.use('/api/data01', require('./routes/dataRoute01'))
app.use('/api/data02', require('./routes/dataRoute02'))
app.use('/api/data03', require('./routes/dataRoute03'))
每个路由中都包含相同的方法,除了它们所调用的模型之外。
所以,dataRoute01.js
具有这样的方法:
//CREATE
router.post('/', (req, res, next) => {
let { name, details, content, timestamp } = req.body
Data01.create({ name, details, content, timestamp })
.then(data => {
res.json({
success: true,
data,
})
})
.catch(err => next(err))
})
dataRoute02.js
具有这样的方法:
//CREATE
router.post('/', (req, res, next) => {
let { name, details, content, timestamp } = req.body
Data02.create({ name, details, content, timestamp })
.then(data => {
res.json({
success: true,
data,
})
})
.catch(err => next(err))
})
是否可以将路由合并到一个文件中,而是动态地更改要调用的模型?也许通过将唯一标识符传递到请求中?
也许遵循以下内容(添加到source
中,它将成为请求的来源。它可以是一位数字。例如1
。
将所有api调用指向同一路由。
app.use('/api/data01', require('./routes/dataRoute'))
app.use('/api/data02', require('./routes/dataRoute'))
app.use('/api/data03', require('./routes/dataRoute'))
然后在路线上执行以下操作:
//CREATE
router.post('/', (req, res, next) => {
const source = req.body.source
const schema = 'Data0' + source
let { name, details, content, timestamp } = req.body
schema.create({ name, details, content, timestamp })
.then(data => {
res.json({
success: true,
data,
})
})
.catch(err => next(err))
})
编辑:根据以下答案创建了一个新尝试。api调用中也添加了,因为我认为这将有助于解决问题。
//api.js
addData(source, body) {
const url = '/Data0' + source
return service
.post(url, body)
.then(res => res.data)
.catch(errHandler)
},
//dataRoute.js
const express = require('express')
const Data01 = require('../models/Data01')
const Data02 = require('../models/Data02')
const Data03 = require('../models/Data03')
const router = express.Router()
//CREATE
router.post('/', (req, res, next) => {
let { name, details, content, timestamp } = req.body
Data0[req.body.source]
.create({ name, details, content, timestamp })
.then(data => {
res.json({
success: true,
data,
})
})
.catch(err => next(err))
})
然而,.create
之前使用的括号符号似乎被忽略,从而导致如下所示的错误响应:
API response {stack: "ReferenceError: Data0 is not defined↵ at router…r\node_modules\express\lib\router\index.js:635:15", message: "Data0 is not defined"}
回答如下:Schemas.js