MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Искам да пренасочвам към различни страници въз основа на някакво условие

Не можете да направите това, ако изпращате заявка, като използвате извикване на API от Ajax или други методи.

Тъй като всички тези методи са за прилагане на Приложение за една страница , така че изобразяването на различна страница не е разрешено.

Какво се случва, когато условието е изпълнено и поискате изобразяване на различна страница?

Модулът, който е извикал API, чака отговор от браузъра, за да получи някакъв отговор от API, но вашият API се опитва да зареди различна HTML страница, която браузърът забранява и по този начин никога няма да бъдете изобразени чрез извикване на Ajax.

Как да го направя?

Има два изхода:

  1. Приложение за една страница:Използвайки JavaScript Frameworks като AngularJs, ReactJs ще ви помогне само като промени HTML шаблоните, а не цялата страница.

С Ajax можете да направите това:

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

Код от страна на сървъра Предполагам, че използвате express.js и body-parser

app.post('/addName', (req, res) => {
    //Insert into db
    var body = req.body;
    res.send({
    fName: body.FName,
    lName: body.LName
    });
});
  1. Използвайте form Метод на изпращане:използвайки това, ще можете да изобразите страницата, но не можете да изпратите отговор обратно на същата страница, т.е.

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Инсталиране на добавки за mongoose - получаване на грешка

  2. Грешка в текстовия индекс на MongoDB:замяната на езика не се поддържа

  3. Предаване на $HOSTNAME към Docker контейнер при изграждане

  4. Mongoose добавя няколко обекта към масива, ако не съществува

  5. Как мога да комбинирам няколко колекции в една колекция, използвайки $lookup mongodb или nodejs mongodb?