如何在快速节点js中的另一个端点内使用端点

时间:2018-04-15 08:38:36

标签: node.js express ejs

我只是遇到了问题,也不知道问题是否正确。

我正在使用ejs模板引擎在节点表达js上工作。

我创建了某些端点(比如登录(POST)端点),它们是通用端点。

现在我想创建一个新的应用程序,它应该使用这些端点并根据这些端点的结果呈现视图。

假设我有登录的通用端点

router.post('/user/login', function (req, res) {
  var userLoginId = req.body.username;
  var currentPassword = req.body.password;

  UserLogin.findOne({userLoginId: userLoginId, currentPassword: currentPassword}, function (err, usr) {
    if (err) {
      console.log('Error in User login');
      console.log(err);
      res.status(500).type('application/problem+json').send();
    } else {
      if (!usr) {
        console.log('Please enter valid username and password');
        res.status(404).type('application/problem+json').send();
      } else {
        res.type('application/json').status(200).send(usr);
      }
    }
  });
});

我正在使用此login.ejs文件

<div class="container panel panel-primary">
    <h2 class="h2 text-center">Login</h2>
    <form class="form-horizontal" name="loginForm" method="post" action="/user/login">
        <div class="form-group">
            <label for="username" class="col-sm-offset-2 col-sm-2 control-label">UserName</label>
            <div class="col-sm-4">
                <input type="text" name="username" class="form-control" id="username" placeholder="username">
            </div>
        </div>
        <div class="form-group">
            <label for="password" class="col-sm-offset-2 col-sm-2 control-label">Password</label>
            <div class="col-sm-4">
                <input type="password" name="password" class="form-control" id="password" placeholder="Password">
            </div>
        </div>
        <div class="form-group">
            <div class="col-sm-offset-4 col-sm-4">
                <button type="submit" class="btn btn-primary btn-">Sign in</button>
            </div>
        </div>
    </form>
</div>

现在我想使用此代码并希望登录系统。

如果用户登录成功,我想重定向到仪表板页面,否则返回相同的登录页面。

在执行此代码时,api会返回JSON响应,并且从此响应中我如何决定是否在仪表板页面或登录页面上重定向。

如果需要更多输入,请提供帮助请发表评论。

1 个答案:

答案 0 :(得分:0)

我不会做一个表单请求登录,执行AJAX请求登录,然后使用jQuery之类的东西来执行AJAX请求和响应。或者,您可以执行以下操作。

router.get('/login', function(req, res){
  res.render('login', {});
})

router.post('/login', function (req, res) {
  var userLoginId = req.body.username;
  var currentPassword = req.body.password;

  UserLogin.findOne({userLoginId: userLoginId, currentPassword: currentPassword}, function (err, usr) {
    if (err) {
      console.log('Error in User login');
      console.log(err);
      // res.status(500).type('application/problem+json').send();
      res.status(500).render('login', { error : 'Error finding password'})
    } else {
      if (!usr) {
        console.log('Please enter valid username and password');
        // res.status(404).type('application/problem+json').send();
        res.status(404).render('login', { error : 'Please enter valid username and password'})
      } else {
        res.redirect('/dashboard');
      }
    }
  });
});

对于login.ejs文件,我会有条件地呈现错误。

<!DOCTYPE html>

<html>
<body>
    <div class="container panel panel-primary">
        <h2 class="h2 text-center">Login</h2>
        <%if (locals.error) { %>
            <%= error %>
        <% } %>

             <form class="form-horizontal" name="loginForm" method="post" action="/user/login">
                        <div class="form-group">
                            <label for="username" class="col-sm-offset-2 col-sm-2 control-label">UserName</label>
                            <div class="col-sm-4">
                                <input type="text" name="username" class="form-control" id="username" placeholder="username">
                            </div>
                        </div>
                        <div class="form-group">
                            <label for="password" class="col-sm-offset-2 col-sm-2 control-label">Password</label>
                            <div class="col-sm-4">
                                <input type="password" name="password" class="form-control" id="password" placeholder="Password">
                            </div>
                        </div>
                        <div class="form-group">
                            <div class="col-sm-offset-4 col-sm-4">
                                <button type="submit" class="btn btn-primary btn-">Sign in</button>
                            </div>
                        </div>
            </form>
    </div>
</body>

</html>