Рут вылетает heroku-app но работает на localhost - PullRequest
0 голосов
/ 09 июля 2019

У меня есть рабочий бэкэнд, который работает на Heroku. Клиент является реагирующим приложением. Все работает нормально, пока не будет сделан конкретный запрос маршрутизатора.

Я прочитал много сообщений о приложениях, работающих локально, но не в Heroku. Разница в том, что я могу заставить мое приложение запускаться и нормально функционировать, пока на сервер не будет сделан определенный пост-запрос.

Это маршрут. Console.logs для отладки. Сначала я хочу убедиться, что пользователь ранее не голосовал по этому конкретному ответу, а затем пользователь может голосовать.

router.post('/:qID/answers/:aID/vote-:dir',function(req, res, next) {
    console.log(req.body, "THIS IS THE REQ.BODY");
    console.log(req.params.aID);
        if(req.params.dir.search(/^(up|down)$/) === -1) {
            var err = new Error("Not found");
            err.status = 404;
            next(err);
        } else {
            req.vote = req.params.dir;
            req.userId = req.body.userId;
            next();
        }
    },
    function(req, res, next){
        console.log(req.body, "IS THIS THE SAME VALUE?");
        try{
        User.findById(req.userId, (err, user) => {
            if(err){
                console.log(err, "IS THIS AN ERROR?");
                next(err);
            }
            if(user.answersVoted.length > 0) {
                for(let i = 0; i < user.answersVoted.length; i++){
                    if (user.answersVoted[i] == req.answer._id){
                        req.answered = true;
                    } else {
                        req.answered = false;
                    }
                } return next();
            } else {
                updateAnswerArrayandVote(req, res);
            }
        });
    }catch(err){
        console.log(err, "IS THIS AN ERROR TOO?");
        return next(err);
    }

}, function(req, res, next){
    if(req.answered){
        res.status(422).json({message: "Only vote once!"});
    } else {
        updateAnswerArrayandVote(req, res);
    }
});

Это клиентская сторона

handleVote = (id, dir) => {
        if (dir === "up") {
            axios.post(`https://sleepy-falls-59530.herokuapp.com/questions/${this.state.id}/answers/${id}/vote-up`, {
              userId: this.props.userId
            })
            .then(res => {console.log(res)})
            .catch(err => {
              console.log(err);
              this.setState({
                show: true
              })
            })
        } else {
            axios.post(`https://sleepy-falls-59530.herokuapp.com/questions/${this.state.id}/answers/${id}/vote-down`, {
              userId: this.props.userId
            }).then(res => {console.log(res)})
            .catch(err => {
              console.log(err);
              this.setState({
                show: true
              })
            })
        }
    }

Это сообщение об ошибке из логов heroku:

]: throw er; // Unhandled 'error' event
2019-07-09T16:04:09.523006+00:00 app[web.1]: ^
2019-07-09T16:04:09.523009+00:00 app[web.1]:
2019-07-09T16:04:09.523012+00:00 app[web.1]: TypeError: Cannot read property 'length' of undefined
2019-07-09T16:04:09.523015+00:00 app[web.1]: at User.findById (/app/routes.js:329:34)
2019-07-09T16:04:09.523017+00:00 app[web.1]: at /app/node_modules/mongoose/lib/model.js:4645:16
2019-07-09T16:04:09.523019+00:00 app[web.1]: at /app/node_modules/mongoose/lib/query.js:4004:12
2019-07-09T16:04:09.523023+00:00 app[web.1]: at process.nextTick (/app/node_modules/mongoose/lib/query.js:2622:28)
2019-07-09T16:04:09.523025+00:00 app[web.1]: at _combinedTickCallback (internal/process/next_tick.js:132:7)
2019-07-09T16:04:09.523027+00:00 app[web.1]: at process._tickCallback (internal/process/next_tick.js:181:9)
2019-07-09T16:04:09.569320+00:00 app[web.1]: npm ERR! code ELIFECYCLE
2019-07-09T16:04:09.570120+00:00 app[web.1]: npm ERR! errno 1
2019-07-09T16:04:09.573462+00:00 app[web.1]: npm ERR! restAPI@1.0.0 start: `node app.js`
2019-07-09T16:04:09.573822+00:00 app[web.1]: npm ERR! Exit status 1
2019-07-09T16:04:09.574525+00:00 app[web.1]: npm ERR!

Кажется, что User.findById () не работает в heroku, так как массив answersVoted для объекта пользователя не определен. Почему это работает локально и, что более важно, как я могу это исправить? Я знаю, что отправляю правильное значение, поскольку console.logs отображаются в журналах (хотя и не включены в этот пост). Заранее спасибо!

РЕДАКТИРОВАТЬ

Итак, логи герою дают мне это:

MuPuLM8q9i6A1a3uFvUzD8K2EbsGkaRt.QlHmBlMi3ry5ZK',
2019-07-10T18:52:49.981062+00:00 app[web.1]: __v: 1,
2019-07-10T18:52:49.981064+00:00 app[web.1]: answersVoted:
2019-07-10T18:52:49.981066+00:00 app[web.1]: [ '5d0bed720498750dbcc31b3e',
2019-07-10T18:52:49.981067+00:00 app[web.1]: '5ceac5948761ba2b4c2f7a7e',
2019-07-10T18:52:49.981069+00:00 app[web.1]: '5d0bed720498750dbcc31b3e',
2019-07-10T18:52:49.981072+00:00 app[web.1]: '5d17524e4dfec60016a07609',
2019-07-10T18:52:49.981074+00:00 app[web.1]: '5d0bed720498750dbcc31b3e',
2019-07-10T18:52:49.981076+00:00 app[web.1]: '5d17524e4dfec60016a07609',
2019-07-10T18:52:49.981078+00:00 app[web.1]: '5cf90359990b3233a0fbb1ce',
2019-07-10T18:52:49.981080+00:00 app[web.1]: '5d17524e4dfec60016a07609' ] } 'THE USER'
2019-07-10T18:52:49.981088+00:00 app[web.1]: THE USER IS A object
2019-07-10T18:52:49.981159+00:00 app[web.1]: undefined 'THE USERS ANSWERSARRAY'
2019-07-10T18:52:49.983370+00:00 app[web.1]: TypeError: Cannot read property 'length' of undefined

И код для этого:

 User.findById(req.userId, async (err, user) => {
            console.log(user, "THE USER");
            console.log("THE USER IS A", typeof user);
            console.log(user.answersVoted, "THE USERS ANSWERSARRAY");

Как видите, я могу получить доступ к объекту пользователя с показанным массивом answersVoted.

console.log(user) Показывает пользователя и все вложенные объекты, в том числе массива answersVoted-10 * *

console.log(user.answersVoted) не определено.

Асинхронная ошибка или что-то с герокой (так как работает с почтальоном)? Пожалуйста, помогите.

1 Ответ

0 голосов
/ 11 июля 2019

Всегда не забывайте фактически добавлять свойство в схему модели Mongoose, если впоследствии вы захотите использовать его, скажем, в экспресс-маршрутизаторе ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...