Route.post () требует функцию обратного вызова, но получил [объект Undefined] в ExpressJs - PullRequest
0 голосов
/ 10 января 2020

Я знаю, что этот вопрос задавался ранее. Я перепробовал все решения, которые были предоставлены, но все же я застрял. Пожалуйста, посмотрите на мой код:

1) ReviewController. js

exports.setTourUserIds = (req, res, next) => {
    // allow nested route
    if (!req.body.tour) req.body.tour = req.params.tourId
    if (!req.body.user) req.body.user = req.user.id
    next()
}
exports.createReview = handlerFactory.createOne(Review)
exports.updateReview = handlerFactory.updateOne(Review)
exports.deleteReview = handlerFactory.deleteOne(Review)

2) ReviewRoute. js

let express = require('express')
let Router = express.Router({ mergeParams: true })
let reviewController = require('../controllers/reviewController')
let authController = require('../controllers/authController')

Router
    .route('/')
    .get(reviewController.getAllReviews)
    .post(authController.protect,
        authController.restrictTo('user'),
        reviewController.setTourUserIds,
        reviewController.createReview)

Router
    .route('/:id')
    .get(authController.protect, reviewController.getReview)
    .patch(reviewController.updateReview)
    .delete(reviewController.deleteReview)

module.exports = Router

3) handlerFactory. js

exports.createOne = Model => catchAsync(async (req, res, next) => {
    let doc = await Model.createOne(req.body)
    if (!doc) {
        return next(new AppError('No document found with that ID', 404))
    }
    res.status(201).json({
        status: 'success!',
        data: { doc }
    })
})

1 Ответ

0 голосов
/ 10 января 2020

Пожалуйста, измените ваш код с

exports.createReview = handlerFactory.createOne(Review)
exports.updateReview = handlerFactory.updateOne(Review)
exports.deleteReview = handlerFactory.deleteOne(Review)

на

exports.createReview = () => { handlerFactory.createOne(Review)}
exports.updateReview = () => { handlerFactory.updateOne(Review) }
exports.deleteReview = () => { handlerFactory.deleteOne(Review) }

Вы должны передать функцию маршрутизатору Проверьте следующий синтаксис:

Router
.route('/:id').post(function(){})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...