最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Express Router中的动态更改模型模式

IT培训 admin 56浏览 0评论

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

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

发布评论

评论列表 (0)

  1. 暂无评论