如何使用节点js express渲染视图模板

时间:2017-10-27 07:33:13

标签: javascript node.js ajax express firebase-realtime-database

我创建了一个Ajax请求(如下所示),它使用我需要的信息将数据传递给服务器。

function verify(key) {

    $.ajax({
      async: true,
      type: 'GET',
      url: '/zonepass/'+key,
      data: { 
        'zone_key': key
      },
      success: function(res){
          //alert('Sent a text message successfully to ' + res);
      }

    });
}

我在服务器端处理Ajax请求,我使用传入的数据查询我的Firebase数据库以获取其他相关信息。

然后我尝试使用res.render('verify',{zone: obj, key: zone_key})呈现我要导航到的视图页面,其中verify是我要导航用户的另一个.ejs文件,而JSON对象是我的数据想传递给那个模板。

我的代码没有渲染视图页面,我不确定原因。我控制台记录了服务器上的所有数据,所有数据都被正确拉出,但我的视图页面从未导航到验证ejs文件......

app.get('/zonepass/:id', function(req,res) {
  var zone_key = req.param('zone_key');
  var zone_obj = firebase.database().ref('zones').child(zone_key).once('value').then((snap) => {
    obj = snap.val();
    res.render('verify',{zone: obj, key: zone_key});
  });
});

1 个答案:

答案 0 :(得分:2)

res.render无法使用ajax请求,ajax调用的响应将在success函数内返回并可访问,但res.render也不会{{1} }}不适用于res.redirect请求。

因此,您需要使用表单提交请求或将前端重定向到该路由,这在技术上也是ajax请求,但没有get示例:

仅使用HTML:

ajax


使用javascript:

<a href="/zonepass/<your id>?zone_key=<your zone key>">Verify</a>

同样在您的NodeJS路线中,您可以使用function verify(key) { window.location.href= "/zonepass/"+ <your id> + "?zone_key=<your zone key>" } id使用req.params.id访问zone_key,因此您的服务器代码将为:

req.query.zone_key

顺便说一句,如果未验证密钥,您将需要在验证视图内部处理,例如,您在验证视图中显示错误或消息,密钥不正确...或任何与您的逻辑相关的消息