sql >> Databáze >  >> NoSQL >> MongoDB

Chci přesměrovat na různé stránky na základě nějaké podmínky

Nemůžete tak učinit, pokud odesíláte požadavek pomocí volání API z Ajaxu nebo jiných metod.

Všechny tyto metody mají implementovat Jednostránkovou aplikaci , takže vykreslení jiné stránky není povoleno.

Co se stane, když je splněna podmínka a požadavek na vykreslení jiné stránky?

Modul, který zavolal API, čeká na odezvu prohlížeče, aby získal nějakou odpověď od API, ale vaše API se pokouší načíst jinou HTML stránku, kterou prohlížeč zakazuje, a proto se nikdy nevykreslíte pomocí volání Ajax.

Jak to udělat?

Existují dvě cesty ven:

  1. Jednostránková aplikace:Pomocí rozhraní JavaScript, jako je AngularJs, vám ReactJs pomůže tím, že změní pouze šablony HTML, nikoli celou stránku.

S Ajaxem můžete udělat toto:

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);
        }
    });
}

Kód na straně serveru Předpokládám, že používáte express.js a body-parser

app.post('/addName', (req, res) => {
    //Insert into db
    var body = req.body;
    res.send({
    fName: body.FName,
    lName: body.LName
    });
});
  1. Použijte form Způsob odeslání:pomocí tohoto budete moci vykreslit stránku, ale nemůžete odeslat odpověď zpět na stejnou stránku, tj.

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
        });
        }
    });
});



  1. Jak se zaregistrovat a zavolat schéma v mongoose

  2. Sada replik MongoDB s jednoduchým ověřením hesla

  3. MongoDB Driver 2.0 C# existuje způsob, jak zjistit, zda je server mimo provoz? Jak v novém ovladači spustíme příkaz Ping?

  4. Načtěte pouze dotazovaný prvek v poli objektů v kolekci MongoDB