【问题标题】:API route not returning dataAPI 路由不返回数据
【发布时间】:2018-04-10 22:11:07
【问题描述】:

我有这个 api 路由设置,如果我在浏览器中手动输入 /api,它会从我的 staff.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);
    });
  });

我一直收到一条错误消息,提示未定义人员数据,尽管它已明确定义并在我的 api 路由中返回。

谁能解释可能是什么问题?

问候

【问题讨论】:

    标签: javascript json node.js ajax express


    【解决方案1】:

    由于您要返回 res.json(staffData); 而不是呈现视图本身,我假设您只是使用 API 以 JSON 格式访问数据本身。因此考虑到这一点,API 返回的信息可以在您的$.getJSON 调用中的key 参数中访问,正如您在documentation 中看到的那样。您的 Node.js API 不会在浏览器中运行,因为它是服务器端,而作为客户端的浏览器由于显而易见的原因无法访问服务器端声明的变量。

    【讨论】:

      【解决方案2】:

      当您尝试从 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);
      });
      

      });

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-18
        • 1970-01-01
        • 1970-01-01
        • 2018-03-02
        • 2018-02-11
        • 1970-01-01
        • 2022-06-29
        相关资源
        最近更新 更多