Не вижу причины, по которой я получаю возвращаемое NOENT, когда я вижу файл в том месте, где я его запрашиваю. - PullRequest
0 голосов
/ 15 ноября 2018

Я знаю, что это очень похоже на другие вопросы, которые задавались по той же ошибке. В случае, который я видел, имя файла было исключено из URL. В моем случае (насколько я знаю) URL-адрес указан в порядке, и я могу увидеть файл на моем локальном хосте с помощью других инструментов.

У меня есть потребность в приложении node.js для выполнения операций ввода-вывода для файлов JSON без использования экспресс-маршрутизации. Это API, который имеет только один маршрут (processor.js). Доступ к нему осуществляется через меню в графическом интерфейсе, выбрав «Обработка». С этого момента все происходит внутри этого маршрута, включая несколько GET / PUT для json (для идентификаторов данных, а затем с помощью идентификаторов для получения данных) и построения строк SQL для заполнения таблиц SQL-сервера из проанализированных данных json. По крайней мере, это концепция, которую я сейчас тестирую. Это рука, которую мне сдали, поэтому у меня нет других вариантов.

Я использую fs-extra, а не request или axios и т. Д., Потому что все они, похоже, ожидают, что экспресс-маршруты будут выполнять ввод / вывод. Кажется, я могу напрямую читать и писать json, используя fs-extra. Я использую sequelize (или буду) для стороны SQL.

Это фон.

Вот мой процессор.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», системный вызов: «открыто», дорожка: 'http://localhost:5000/Users/doug5solas/sandbox/libertyMutual/playground/api/ids.json'} ​​

Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Я перешел от fs-extra к fs.readFileSync и решил проблему. Это не мое предпочтение. Но это работает, и файл маленький, и только один раз.

0 голосов
/ 15 ноября 2018
  • Вы можете использовать fs-extra для управления файлами и каталогами только в локальной файловой системе.
  • Если вы хотите читать файлы, размещенные на другом компьютере через http, попробуйте использовать http-клиент, например:axios.
...