控制器中的快速路由未解析

时间:2018-08-08 19:47:58

标签: node.js express routing

我使用的是Express 4.16.3,试图弄清为什么对控制器的一个请求有效而对请求无效的原因。

在我的server.js中,我有以下内容。没有分号,因为事先使用了漂亮的分号。

import express from 'express'
import bodyParser from 'body-parser'
import cors from 'cors'
import PriceCheckerController from './controllers/PriceChecker'
import PersonalLibraryController from './controllers/PersonalLibrary'

const app = express()
app.set('port', process.env.PORT || 5000)
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: true}))
app.use(cors())
// routes definition
app.use('/api/books',PersonalLibraryController) // this does not
app.use('/api/stock-prices', PriceCheckerController) // this works
//
app.listen(app.get('port'), error => {
  if (error) {
   logger.error(`error fcc-isqa:${error}`)
  } else {
   logger.info(`fcc-isqa is running on port ${app.get('port')}`)
  }
})
export default app

在PriceCheckerController中,我已经实现了它。

import 'babel-polyfill' // mocha required
import express from 'express'
import logger from '../logger'

const PriceCheckerController = express.Router()
PriceCheckerController.use((req, res, next) => {
  logger.info(
    `date=>${new Date()}\n method=>${req.method}nsender:${req.ip}`
  )
})
PriceCheckerController.get('/', async (req, res) => {
   return res.status(200).json({message:'soon'})
})
export default PriceCheckerController

在PersonalLibraryController中,我已经像这样实现了

import 'babel-polyfill'
import express from 'express'
import logger from '../logger'


const PersonalLibraryController = express.Router()
PersonalLibraryController.use((req,res,next)=>{
   logger.info(
    `library date=>${
      new Date()}method=>${req.method}url=>${req.baseUrl}${req.path}`
    )
})
PersonalLibraryController.route('/test')
.get(async (req, res) => {
    return res.status(200).json({message: 'get soon'})
})
.post(async (req,res)=>{
    return res.status(200).json({message: 'post soon'})
})
export default PersonalLibraryController

对/ api / stock-prices的请求很快会返回OK,并显示消息。 中间件记录了对/ api / books / test的请求,但未发送回响应。最终会导致超时

谁能给我任何见解/帮助,以了解问题所在以及如何解决? 预先感谢。

1 个答案:

答案 0 :(得分:1)

您的中间件函数需要调用next()来执行路由执行。

例如

PriceCheckerController.use((req, res, next) => {
  logger.info(
    `date=>${new Date()}\n method=>${req.method}nsender:${req.ip}`
  )
  next();
})

https://expressjs.com/en/guide/using-middleware.html

“如果当前中间件函数未结束请求-响应周期,则必须调用next()将控制权传递给下一个中间件函数。否则,请求将被挂起。”