Я хочу перенаправить на разные страницы в зависимости от условий - PullRequest
0 голосов
/ 29 августа 2018

когда я запускаю этот код, я получаю перенаправление на страницу postUser, когда я хочу перенаправить, если условие истинно, и отображать представление, если условие ложно ...

router.get('/postedUser/:id', ensureAuthenticated, function(req, res) {
  User.findOne({_id: req.params.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 Ответ

0 голосов
/ 29 августа 2018

Вы не можете сделать это, если отправляете запрос, используя вызов API из Ajax или другими методами.

Так как все эти методы предназначены для реализации Одностраничного приложения , то отрисовка другой страницы не допускается.

Что происходит при выполнении условия и запросе на рендеринг другой страницы?

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

Как это сделать?

Есть два выхода:

  1. Одностраничное приложение: используя JavaScript-фреймворки, такие как 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
        });
        }
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...