API路由不返回数据

时间:2017-10-30 00:24:45

标签: javascript json node.js ajax express

如果我手动在浏览器中键入/ api,我已经设置了api路由并从employee.json文件返回数据:



var express = require('express');
var router = express.Router();
var staffData = require('../data/staff.json')

router.get('/api', function(req, res){
  res.json(staffData);
});
module.exports = router;




然而,当我尝试使用此功能使其在我的一个视图中工作时:



  $('#search').click(function(){
    $.getJSON('api', function(key,val){
      var search = $('#search').val();
      var regex = new RegExp('search', 'i');
      var output;
      $.each(staffData, function(key, val){
        if(val.name.search(regex) != -1 || val.email.search(regex)){
          output += "<tr>";
          output += "<td id='"+key+"'>"+val.name+"</td>";
          output += "<td id='"+key+"'>"+val.email+"</td>";
          output += "</tr>";
        }
      });
      $('tbody').html(output);
      console.log(output);
    });
  });
&#13;
&#13;
&#13;

我一直收到一条错误,说没有定义staffData,虽然它已经明确定义并在我的api路径中返回。

任何人都可以解释问题所在吗?

此致

2 个答案:

答案 0 :(得分:1)

由于您正在返回res.json(staffData);而不是自己呈现视图,我假设您只是使用API​​以JSON格式访问数据本身。因此,考虑到这一点,可以在key调用的$.getJSON参数中访问API返回的信息,如documentation中所示。你的Node.js API不能在浏览器中运行,因为它是服务器端,而浏览器,作为客户端,由于显而易见的原因,对服务器端声明的变量没有任何访问权限。

答案 1 :(得分:0)

当您尝试从api获取响应时,响应将作为回调函数中的参数返回。如果你想使用'staffData'变量,你需要在回调中使用它,如下面的函数。 请使用以下代码。

$('#search').click(function(){
  $.getJSON('/api', function(staffData){
  var search = $('#search').val();
  var regex = new RegExp('search', 'i');
  var output;
  $.each(staffData, function(key, val){
    if(val.name.search(regex) != -1 || val.email.search(regex)){
      output += "<tr>";
      output += "<td id='"+key+"'>"+val.name+"</td>";
      output += "<td id='"+key+"'>"+val.email+"</td>";
      output += "</tr>";
    }
  });
  $('tbody').html(output);
  console.log(output);
});

});