如果我手动在浏览器中键入/ 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;
我一直收到一条错误,说没有定义staffData,虽然它已经明确定义并在我的api路径中返回。
任何人都可以解释问题所在吗?
此致
答案 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);
});
});