ExpressJS / Mongodb POST запрос и потеря пользовательских данных - PullRequest
0 голосов
/ 23 октября 2019

У меня есть приложение NodeJS, и я пытаюсь добавить функцию «Запросить билет» на своей странице профиля пользователя. Пользователь отправляет запрос, который создает новый тикет в моем mongodb, однако, когда я отправляю запрос и пытаюсь перезагрузить страницу профиля, я теряю данные пользователя. (т.е. user.username не определено).

//User Open Ticket post
router.post('/openTicket', function(req,res,){
        var userDescription = req.body.userDescription
        var requestDevice     = req.body.requestDevice;
        var phonenumber = req.body.phonenumber;


        req.checkBody('requestDevice', 'Device is required').notEmpty();
        req.checkBody('userDescription', 'description is required').notEmpty();



        var errors = req.validationErrors();

    if(errors){
            console.log('Request has errors...');
            res.render('profile', {
                errors: errors,
                requestDevice: requestDevice,
                userDescription: userDescription,
            });
    } else {
            var phonenumber = phonenumber;

            var newTicket = {
                id: Math.random().toString(36).substring(2),
                requestDevice: requestDevice,
                userDescription: userDescription,
                openDate: new Date(),
                closeDate: "",
                techComment: "",
                status : "open",
            }

            db.users.update( {phonenumber: phonenumber }, {$set: {"tickets":  [newTicket]  } }, false, function(err, doc) {
                if(err){
                        res.send(err);
                    } else {
                        console.log('ticket Added...');
                        res.render('profile');

                    }
            });


        }
});

и моя консоль

ReferenceError: C:\Users\Mikey\Desktop\itspot\views\profile.ejs:54
    52|     <div class="w3-display-container w3-center w3-mobile" style="height: 300px">
    53|         <div class="w3-display-middle w3-card-2 w3-center" style="margin-top: 25px; width: 35%" >
 >> 54|            <h4 class="w3-center">Welcome <%= user.username %> !</h4>
    55|            <p class="w3-center"><img src="../img/avatar.png" class="w3-circle" style="height:106px;width:106px" alt="Avatar"></p>
    56|            <hr>
    57|            <p> <i class="fa fa-home fa-fw  w3-text-theme"></i> Zip: <%= user.zipCode %> </p>

user is not defined
    at eval (eval at compile (C:\Users\Mikey\Desktop\itspot\node_modules\ejs\lib\ejs.js:633:12), <anonymous>:11:26)
    at returnedFn (C:\Users\Mikey\Desktop\itspot\node_modules\ejs\lib\ejs.js:668:17)
    at tryHandleCache (C:\Users\Mikey\Desktop\itspot\node_modules\ejs\lib\ejs.js:254:36)
    at View.exports.renderFile [as engine] (C:\Users\Mikey\Desktop\itspot\node_modules\ejs\lib\ejs.js:485:10)
    at View.render (C:\Users\Mikey\Desktop\itspot\node_modules\express\lib\view.js:135:8)
    at tryRender (C:\Users\Mikey\Desktop\itspot\node_modules\express\lib\application.js:640:10)
    at Function.render (C:\Users\Mikey\Desktop\itspot\node_modules\express\lib\application.js:592:3)
    at ServerResponse.render (C:\Users\Mikey\Desktop\itspot\node_modules\express\lib\response.js:1012:7)
    at C:\Users\Mikey\Desktop\itspot\routes\users.js:50:8
    at Layer.handle [as handle_request] (C:\Users\Mikey\Desktop\itspot\node_modules\express\lib\router\layer.js:95:5)
Device Added...

Ответы [ 2 ]

0 голосов
/ 27 октября 2019

Вместо рендеринга представления попробуйте перенаправить на /profile маршрут

db.users.update( {phonenumber: phonenumber }, {$set: {"tickets":  [newTicket]  } }, false, function(err, doc) {
                if(err){
                        res.send(err);
                    } else {
                        console.log('ticket Added...');
                        res.redirect('/profile'); // Change render to redirect

                    }
            });
0 голосов
/ 23 октября 2019

Вы должны передавать пользовательские данные при рендеринге страницы профиля, res.render ('profile', {user: doc}), как это.

...