Express обходной путь с одним ответом - PullRequest
0 голосов
/ 05 августа 2020

Я застрял здесь перед дилеммой: как только мой пользователь входит в систему, я хочу перенаправить их на страницу дашборда, но также отправить их json данные на мою клиентскую сторону javascript. Я знаю, что может быть только одно разрешение. send / end / json в ответ и что я могу отправлять данные Dynami c, используя механизмы просмотра. Причина, по которой я хочу отправлять данные отдельно, заключается в том, что я не просто хочу их отображать, а скорее использую данные в моем клиентская сторона JS, так что я могу использовать его позже для сокетов в приложении чата. Я много чего пробовал, используя непрерывные локальные переменные, чтобы попытаться создать промежуточное ПО или автоматическое перенаправление c. Проблема заключается в том, что res. json () сложно встроить в промежуточное ПО, поскольку в тот момент, когда он вызывается, нет возможности для объявления следующего или перенаправления. Вот как выглядит мой код для маршрута входа:


    router.get(’/’, (req,res)=>{
    console.log(req.user._id);
    
    User.findOne({
    
        "_id": req.user._id
    
    }, function(err, foundUser) {
    
        if (err) {
    
            console.log(err);
    
            return res.status(500).json({
    
                ok: false,
    
                error: err
    
            });
    
        } else {
    
            console.log(foundUser); //THE ELEMENT IS FOUND
    
            return res.status(200).json({
    
                ok: true,
    
                data: foundUser
    
            });
    
        }
    });
    res.sendFile('chat.html', { root: path.join(__dirname, '../views/') });
    });

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Вам необходимо сделать так, чтобы ваша страница chat.html запрашивала данные json. Это означает, что вам нужны два маршрута:

router.get(’/’, (req,res)=>{
    es.sendFile('chat.html', { root: path.join(__dirname, '../views/') });
});

router.get(’/myself’, (req,res)=>{ // I normally call this route "myself"
                                   // but you can call it anything you want
    console.log(req.user._id);
    
    User.findOne({
        "_id": req.user._id
    }, function(err, foundUser) {
    
        if (err) {
            console.log(err);
    
            return res.status(500).json({
                ok: false,
                error: err
            });
    
        } else {
            console.log(foundUser); //THE ELEMENT IS FOUND
    
            return res.status(200).json({
                ok: true,
                data: foundUser
            });
        }
    });
});

Теперь вам нужен ваш chat.html файл, чтобы сделать запрос на новые /myself данные. Есть разные способы сделать это, но для современных браузеров вы можете использовать fetch :

chat. html

<html>
<head>
    ... rest of your html head
    <script>
        fetch('/myself')
            .then(res => res.json())
            .then(res => {
                if (res.ok === false) {
                    // Handle your error here, I'm just alerting it:
                    alert(res.error);
                }
                else {
                    let user = res.data;

                    // Now you can do anything with the user data
                    // in here. I'm just logging it:

                    console.log('user =', user);
                }
            });
    </script>
</head>
<body>
    ... rest of your html code
</body>
</html>
0 голосов
/ 05 августа 2020

вы можете сделать ajax запрос со своей страницы, чтобы получить нужные данные и сохранить их на стороне клиента.

...