当我可以在我要求的确切位置看到文件时,看不到我返回 NOENT 的原因

Do not see the reason I am getting a NOENT returned when I can see the file at the exact spot I am calling for it to be

我知道这与针对同一错误提出的其他问题非常相似。不过,在我看到的情况下,文件名已从 url 中删除。在我的例子中(据我所知)url 被指定为它应该的样子,我可以使用其他工具在我的本地主机上看到该文件。

我需要在 node.js 应用程序中对 json 文件执行 I/O,而无需使用快速路由。这是一个只有一条路线 (processor.js) 的 API。通过选择 'Process' 通过 GUI 上的菜单选择访问它。从那时起,所有事情都发生在该路线内,包括多个 GETs/PUTs 到 json (用于 ids 到数据,然后使用 ids 获取数据)和构建 SQL 行以填充 SQL-来自已解析 json 数据的服务器表。那,至少是我现在正在测试的概念。这是我的手,所以我没有其他选择。

我使用的是 fs-extra 而不是 request 或 axios 等,因为它们似乎都希望使用快速路由来完成 I/O。我似乎能够使用 fs-extra 直接读写 json。我正在(或将要)为 SQL 端使用 sequelize。

这就是背景。

这是我的 processor.js(我只是在验证此时我实际上可以将 idsList 返回给我):

'use strict';

//  node_modules
const express = require('express');
const router  = express.Router();
const fse     = require('fs-extra')

//  local modules
const idsList  = require('../functions/getIds');

router.get('/', (req, res) => {
    console.log(idsList);
});


module.exports = router;

这是我的 getIds 函数:

'use strict';

//  library modules
const express      = require('express');
const router       = express.Router();
const fse          = require('fs-extra');
const uri          = require('../uri');

//  initialize general variables
let baseURL = `http://localhost:5000${uri}/`;
let idsID = 'ids.json';

const getIds = async () => {
    let url = `${baseURL}${idsID}`;
    try {
        const idsList = await fse.readJson(url);
        console.log('fse.readJson',idsList);
    } catch (err) {
        console.error(err);
    }
}

module.exports = getIds();

而且,这是我的错误,输出到控制台(它的格式不是很好):

Listening on port 5000...
{ [Error: ENOENT: no such file or directory, open 

'http://localhost:5000/Users/doug5solas/sandbox/libertyMutual/playground/api/ids.json'] 错误号:-2, 代码:'ENOENT', 系统调用:'open', 小路: 'http://localhost:5000/Users/doug5solas/sandbox/libertyMutual/playground/api/ids.json' }

我错过了什么?

  • 您只能使用 fs-extra 操作本地文件系统中的文件和目录。
  • 如果您想通过 http 读取托管在其他机器上的文件,请尝试使用像这样的 http 客户端:axios

我从 fs-extra 转移到 fs.readFileSync 并解决了问题。这不是我的偏好。但它确实有效,而且文件很小,而且只有一次。