【发布时间】:2018-10-31 19:37:31
【问题描述】:
我对 Node 还很陌生,以至于 HTTP 请求让我很吃力。我已经检查了类似问题的所有答案,但似乎没有一个能解决我的问题。
我不得不在 API 中处理 JSON 文件。然后,我解析这些 JSON 文件,将它们分成填充 SQL 数据库的行。 API 有一个 ID 为“keys.json”的 JSON 文件,如下所示:
{
"keys":["5sM5YLnnNMN_1540338527220.json","5sM5YLnnNMN_1540389571029.json","6tN6ZMooONO_1540389269289.json"]
}
keys 属性中的每个数组元素都保存 API 中 JSON 数据文件之一的值。
我在将任何类型的文件返回给我时遇到问题,但我想如果我能了解我尝试获取“keys.json”的方式有什么问题,我可以利用这些知识来获取单个 JSON键数组中表示的数据文件。
我正在使用 npm 模块 'request' 和 'request-promise-native' 如下:
const request = require('request');
const rp = require('request-promise-native');
我的 URL 由以下元素构成,如下所示(我使用 ... 使我的客户保持匿名,但除此之外它是直接副本:
let baseURL = 'http://localhost:3000/Users/doug5solas/sandbox/.../server/.quizzes/'; // this is the development value only
let keysID = 'keys.json';
显然,当我们部署时,本地主机方面将不得不消失,但我现在只是在测试。
这是我的 HTTP 调用:
let options = {
method: 'GET',
uri: baseURL + keysID,
headers: {
'User-Agent': 'Request-Promise'
},
json: true // Automatically parses the JSON string in the response
};
rp(options)
.then(function (res) {
jsonKeysList = res.keys;
console.log('Fetched', jsonKeysList);
})
.catch(function (err) {
// API call failed
let errMessage = err.options.uri + ' ' + err.statusCode + ' Not Found';
console.log(errMessage);
return errMessage;
});
这是我的控制台输出:
http://localhost:3000/Users/doug5solas/sandbox/.../server/.quizzes/keys.json 404 Not Found
我很清楚,正在使用 .catch() 子句而不是 .then() 子句。但我不知道为什么会这样,因为数据就在那个地方。我知道这是因为我手动将它放在那里。
【问题讨论】:
-
很明显...要么网址错误,要么您的问题与给定的代码无关。
-
@Kevin B 你能澄清一下吗?我在本地机器上构建了这个环境,并亲自加载了数据,以便测试逻辑。而且,除了与此 HTTP 请求相关的代码之外,我已经注释掉了所有内容。我显示的控制台输出是我的 errMessage。所以,我不确定你在告诉我什么。
-
您从 http 服务器收到 404 错误。这意味着解释该 http 请求的服务器逻辑出于某种原因会给您一个 404 响应。这实际上与提出请求的客户无关。 (客户端是您在问题中提供的代码)
-
假设 url 正确,我们可以断定问题与您提供的代码无关(因此问题在当前形式下无法回答)
-
我猜你正在使用 express 或类似的东西(或者只是 node.js 和 http 模块)来创建一个 HTTP 服务器并且还没有设置它来提供给定的 json 文件路径。
标签: node.js json http npm request