当我可以在我要求的确切位置看到文件时,看不到我返回 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 并解决了问题。这不是我的偏好。但它确实有效,而且文件很小,而且只有一次。
我知道这与针对同一错误提出的其他问题非常相似。不过,在我看到的情况下,文件名已从 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 并解决了问题。这不是我的偏好。但它确实有效,而且文件很小,而且只有一次。