sql >> Database teknologi >  >> NoSQL >> MongoDB

Jeg vil omdirigere til forskellige sider baseret på en eller anden betingelse

Du kan ikke gøre det, hvis du indsender en anmodning ved hjælp af et API-kald fra Ajax eller andre metoder.

Da alle disse metoder er at implementere Single Page Application , så gengivelse af en anden side er ikke tilladt.

Hvad sker der, når betingelsen er opfyldt og anmoder om at gengive en anden side?

Modulet, der kaldte API, venter på svar på browser for at få noget svar fra API, men din API forsøger at indlæse en anden HTML-side, som browseren forbyder, og du vil derfor aldrig blive gengivet via Ajax-kald.

Hvordan gør man det?

Der er to veje ud:

  1. Enkeltsideapplikation:Brug af JavaScript-rammer som AngularJs, ReactJs vil hjælpe dig ved blot at ændre HTML-skabeloner og ikke hele siden.

Med Ajax kan du gøre dette:

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

Serversidekode Jeg går ud fra, at du bruger express.js og body-parser

app.post('/addName', (req, res) => {
    //Insert into db
    var body = req.body;
    res.send({
    fName: body.FName,
    lName: body.LName
    });
});
  1. Brug form Send metode:ved at bruge denne vil du være i stand til at gengive siden, men du kan ikke sende svar tilbage til samme side, dvs.

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. Konfigurer Mongo ved hjælp af mongodb+srv

  2. MongoDB - Slap af array ved hjælp af aggregering og fjern dubletter

  3. Forebyg runtime panik i bson.ObjectIdHex

  4. MongoDB balancer timeout med forsinket replika