【问题标题】:Node.js - Why does my HTTP GET Request return a 404 when I know the data is there @ the URL I am usingNode.js - 当我知道数据在那里@我正在使用的 URL 时,为什么我的 HTTP GET 请求返回 404
【发布时间】: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


【解决方案1】:

感谢@Kevin B 提供有关静态文件服务的提示。我使用 express.static 修改了逻辑并使用该功能提供文件,一切都按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多