Express / JS的新手,请原谅我,如果这显然是不可能的。现在,我有一个端点,需要Google API返回政府官员名单并将其清理成可用的JSON。
app.get('/api/officials/:zip', (req, res) => {
var request = require('request');
request("https://www.googleapis.com/civicinfo/v2/representatives?key=" + process.env.GOOGLE_API_KEY + "&address=" + req.params.zip, function (error, response, body) {
if (!error && response.statusCode == 200) {
// body returns a string so make it onto a JSON object
cleanData = (tons of clean up statements);
res.send(cleanData);
}
})
});
接下来,我有另一个端点,我想返回上面的结果,但是根据官方名称将其限制为特定条目。
app.get('/api/officials/:zip?name=:name', (req, res) => {
var request = require('request');
request('/api/officials/' + req.params.zip, function (error, response, body) {
if (!error && response.statusCode == 200) {
official = _.find(body, {'name': req.query.name});
res.send(official);
}
})
});
我已尝试过这几种方法,只在第二个端点上获得Error: Not Found
。
非常感谢任何帮助。
答案 0 :(得分:1)
第二个API端点的网址错误。
GET /api/officials/:zip?name=:name
URL查询的处理方式与URL参数不同。当您使用:zip
或:name
时,您说这个端点有两个req.params
。
但是,您要做的是将name
作为URL查询而不是参数。
请改为尝试:
GET /api/officials/:zip
网址查询由express自动处理。
在您的情况下,您可以处理同一API端点中的两种情况。我将如何做到这一点:
app.get('/api/officials/:zip', function(req, res, next) {
var request = require('request');
request("https://www.googleapis.com/civicinfo/v2/representatives?key=" + process.env.GOOGLE_API_KEY + "&address=" + req.params.zip, function(error, response, body) {
if (!error && response.statusCode == 200) {
// body returns a string so make it onto a JSON object
cleanData = "tons of clean up statements"; // do your processing
if (req.query.name) { // checking if there is a 'name' variable in the req.query object
// handling your 2nd API endpoint
official = _.find(cleanData, { 'name': req.query.name });
res.send(official);
} else { // if no 'name' variable is there in the req.query object just send the clean data
// handling your 1st API endpoint
res.send(cleanData);
}
}
});
});