【问题标题】:I want to redirect to different pages based on some condition我想根据某些条件重定向到不同的页面
【发布时间】:2019-02-04 14:00:20
【问题描述】:

当我运行此代码时,如果条件为真,我想重定向到 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
      });
    }
  });
});

谁能告诉我哪里出错了..

【问题讨论】:

标签: node.js mongodb express


【解决方案1】:

如果您使用来自 Ajax 的 API 调用或其他方法提交请求,则不能这样做。

由于所有这些方法都是为了实现单页应用,所以不允许渲染不同的页面。

当满足条件并请求呈现不同的页面时会发生什么?

调用 API 的模块正在等待浏览器上的响应以从 API 获得一些响应,但是您的 API 正在尝试加载浏览器禁止的不同 HTML 页面,因此您将永远无法通过 Ajax 调用呈现。

怎么做?

有两种出路:

  1. 单页应用程序:使用 AngularJs 等 JavaScript 框架,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
        });
        }
    });
});

【讨论】:

    猜你喜欢
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    相关资源
    最近更新 更多