MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Eu quero redirecionar para páginas diferentes com base em alguma condição


Você não pode fazer isso se estiver enviando uma solicitação usando uma chamada de API do Ajax ou outros métodos.

Como todos esses métodos são para implementar o Aplicativo de página única , portanto, renderizar uma página diferente não é permitido.

O que acontece quando a condição é atendida e a solicitação para renderizar uma página diferente?

O módulo que chamou a API está aguardando resposta no navegador para obter alguma resposta da API, porém sua API está tentando carregar uma página HTML diferente que o navegador proíbe e, portanto, você nunca será renderizado via chamada Ajax.

Como fazer isso?

Existem duas saídas:
  1. Aplicativo de página única:usando estruturas JavaScript como AngularJs, o ReactJs ajudará você apenas alterando os modelos HTML e não a página inteira.

Com Ajax você pode fazer isso:

HTML
<body>
    <div>   
        <div align="center">
        <form id="form1">
            <label>Please enter below details</label><br><br>
            <label>First Name *: </label><input id="FName" type="text" name="FName"/><br><br>
            <label>Last Name *: </label><input id="LName" type="text" name="LName"/><br><br>         
            <label>Email Address *: </label><input type="email" name="email"><br><br>
            <br><br>
            <input type="button" value="Submit" onClick:"submitForm()"/>
        </form>
        <div id="showValue"></div>
        </div>
    </div>
</body>

JavaScript
function submitForm() {
    $.ajax({
        url: '/addName',
        type: 'POST',
        headers: headers,
        data: {
            "Fname": $("#FName").val(),
            "Lname": $("#LName").val(),
            "email": $("#email").val()
        },
        success: function(result) {
            //append result to your html
            //Dynamic view
            $("#form1").hide();
            var html = '<div><span>First Name: ' + result.fName + '</span><span>Last Name: ' + result.lName + '</span></div>';
            $("#showValue").html(html);    
        },
        error: function (error) {
            alert('error ',error);
        }
    });
}

Código do lado do servidor Estou assumindo que você está usando express.js e body-parser
app.post('/addName', (req, res) => {
    //Insert into db
    var body = req.body;
    res.send({
    fName: body.FName,
    lName: body.LName
    });
});
  1. Usar form Método de envio:usando isso, você poderá renderizar a página, mas não poderá enviar a resposta de volta para a mesma página, ou seja,

HTML
<body>
    <div>   
        <div align="center">
        //Can't send params using this approach
        //Data will be send as query string
        <form action="/postedUser/" method="GET">
            <label>Please enter below details</label><br><br>
            <label>ID *: </label><input id="ID" type="text" name="ID"/><br><br>
            <input type="submit" value="Submit" /></form>
        </div>
    </div>
</body>

NodeJS
//If there will be res.send({});
// This won't be returned to same page. But your code doesn't do any such thing

router.get('/postedUser/', ensureAuthenticated, function(req, res) {
   User.findOne({_id: req.query.id}, function(err, data) {
        if (err) throw err;
        if (req.user._id == data._id) {
        res.redirect('/users/profile');
        } else {
        res.render('postedUser', {
            data: data
        });
        }
    });
});