Узел рендеринга страницы после работы с базой данных с помощью ajax - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь отобразить страницу после завершения какой-либо операции с базой данных.Если я захожу в консоль> сеть> предварительный просмотр, он отображает то, что я хочу, но не на реальной странице.Что я делаю не так, это просто тот факт, что я использую AJAX-вызов?

router.get('/', function(req, res) {
    Promise.all([verifylogin(req.query.field1)])
        .then(
            data => {
                res.send(`<h1>something here</h1>`);


            }
        ).catch(
            // Log the rejection reason
            (reason) => {
                console.log('Handle rejected promise (' + reason + ') here.');
                res.redirect(303, '/thank-you');
            });


});

это то, что вызывает код сервера на внешней стороне:

$('#login').on("click", () => {
        var email = $('#email').val();
        var password = $('#password').val();
        $.get("/register", {
            field1: email,
            field2: password
        });
    });

Нужно ли использовать форму вместо Ajax?

1 Ответ

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

Предположим, что маршрут правильный (/register не /). Вы получаете ответ <h1>something here</h1>, но нигде не пишете (или не видите).

$('#login').on("click", () => {
    var email = $('#email').val();
    var password = $('#password').val();
    $.get("/register", {
        field1: email,
        field2: password
    })
    .done(data => { 
        //write somewhere
        $('#someid').html(data);
    });
});

Но вам нужно взглянуть и на часть catch, она просто перенаправляет на другую страницу. Но вы делаете Ajax, поэтому он вернет перенаправленное содержимое страницы.

EDIT:
Почему не работает перенаправление?

Допустим, вы хотите GET маршрут, например, /route1, который возвращает html. Другой маршрут - /route2, который внутренне перенаправляет на /route1.

Итак, если вы HTTP GET /route2 как вы думаете, что будет на выходе? это будет содержимое route1. Поскольку внутренне он перенаправляет на /route1, то есть, в основном, он аналогичен извлечению содержимого /route1.

Я сделал POC для понимания:

app.get('/:id', (req,res)=>{
    if(req.params.id === '2'){
        res.redirect('/3');
    }else{
        res.send(req.params.id || "products");
    }
});

для этого маршрута,

fetch('http://host/1').then((d)=>d.text()).then(console.log)  //returns 1
fetch('http://host/3').then((d)=>d.text()).then(console.log)  //returns 3

Обход : В вашем блоке catch вы можете вернуть url, а в обработчике #login вы можете добавить window.location.href = <theurl> в случае ошибки.

...