Объявите несколько module.exports в Node.js, TypeError: Router.use () требует функции промежуточного программного обеспечения, но получил объект - PullRequest
0 голосов
/ 07 ноября 2018

Я занимаюсь разработкой javascript-приложения и у меня возникли некоторые проблемы.

Я хочу экспортировать два роутера, вот мой код:

const {Router} = require('express')
const car = require('./car')
const user = require('./user')

// Routing
const routerCar = new Router()
routerCar.use('/car', car)
const routerUser = new Router()
routerUser.use('/user', user)
// 404 Error handler
routerCar.use((req, res, next) =>  res.status(404).send({error: 'Routing not found'}))
routerUser.use((req, res, next) =>  res.status(404).send({error: 'Routing not found'}))
// 500 Error handler
routerCar.use((err, req, res, next) =>  {
    console.error(err.stack)
    res.status(500).send({error: 'Server error'})
})
routerUser.use((err, req, res, next) =>  {
    console.error(err.stack)
    res.status(500).send({error: 'Server error'})
})


module.exports = {
    routerCar,
    routerUser
};

Если я экспортирую только один маршрутизатор, все работает нормально, например:

module.exports= routerCar

Но если я экспортирую несколько маршрутизаторов:

module.exports = {
        routerCar,
        routerUser
    };

Я получаю ошибку.

TypeError: Router.use() requires a middleware function but got a Object

Вот и мой app.js:

const http = require('http')
const { env, port, ip, apiRoot } = require('./config')
const express = require('./services/express')
const api = require('./api')    

const app = express(apiRoot, api)
const server = http.createServer(app)


setImmediate(() => {
  server.listen(port, ip, () => {
    console.log('Express server listening on http://%s:%d, in %s mode', ip, port, env)
  })
})


module.exports = app

И index.js:

const express = require('express')
const bodyParser = require('body-parser')

const expressConfig = (apiRoot, routes) => {
  const app = express()

  app.use(bodyParser.json())  // obsluga dekodowania JSON
  app.use(apiRoot, routes)

  return app
}

module.exports = expressConfig

Как я могу это исправить? Заранее спасибо.

EDIT:

Источник для 'require (' ./ car ')':

const { Router } = require('express')
const { createCar,showCars,updateCarById, showCarById ,destroyCarById,createReservationForCarId,showReservationByUserId,destroyReservationByUserId} = require('./controller')

const router = new Router()

router.post('/',
    createCar)

router.get('/',
    showCars)

router.get('/:id',
    showCarById)

router.put('/:id',
    updateCarById)

router.delete('/:id',
    destroyCarById)

router.put('/:id/reservation',
    createReservationForCarId)

router.get('/:id/reservation/:userID',
    showReservationByUserId)

router.delete('/:id/reservation/:userID',
    destroyReservationByUserId)

module.exports = router

Для пользователя:

const { Router } = require('express')
const {addUser,showUsers,showUserByID,updateUserByID,destroyUserByID} = require('./controller')

const router = new Router()

router.post('/',
    addUser)

router.get('/',
    showUsers)

router.get('/:id',
    showUserByID)

router.put('/:id/',
    updateUserByID)

router.delete('/:id',
    destroyUserByID)


module.exports = router
...