У меня есть экспресс-сервер, который принимает вызовы 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) //body here also contains the source
.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"}