Как создать исполняемый файл express api

#javascript #node.js #express #multer

#javascript #node.js #экспресс #мультер

Вопрос:

Я создал полностью функционирующий довольно простой JavaScript Node.js Приложение Express API, которое я хочу запустить как исполняемый файл в среде Windows. Я хочу сделать это, чтобы предоставить клиентам возможность запускать мой API локально, не предоставляя им доступ к моему исходному коду.

В настоящее время я использую пакет pkg npm, который позволяет мне упаковывать мои node.js преобразование приложения в исполняемый файл, который будет содержать все необходимое для запуска приложения, включая node и мой исходный код в комплекте.

Мой исполняемый файл запускается, но мой почтовый маршрут прерывается со следующей ошибкой:

     "name": "RequestError",
    "message": "Error: form-data: File or directory 'C:\**\myapp-api\uploads\1553103249524_test.wav' was not included into executable at compilation stage. Please recompile adding it as asset or script.",
    "cause": {
        "errno": -4058,
        "code": "ENOENT",
        "path": "C:\snapshot\myapp-api\uploads\test.wav",
        "pkg": true
    },
    "error": {
        "errno": -4058,
        "code": "ENOENT",
        "path": "C:\snapshot\myapp-api\uploads\1553103249524_test.wav",
        "pkg": true
    },
  

Мой ПОСТ позволяет клиентам загружать файл в виде нескольких частей с помощью multer.js к другому внешнему API, который вернет некоторые метаданные. pkg.js похоже, у него нет средств для обнаружения файлов, которые включаются после объединения исполняемого файла.

Могу ли я что-нибудь сделать в своей конфигурации, чтобы включить мои загруженные файлы? Существует ли какая-либо другая утилита или процесс, которые другие используют для создания исполняемого файла своего node.js экспресс-API, которые лучше справились бы с возникшей у меня проблемой?

Любые рекомендации были бы действительно замечательными.

Ответ №1:

Попробуйте добавить свои файлы в раздел «ресурсы» в файле package.json.

Пункт конфигурации на веб-сайте pkg https://www.npmjs.com/package/pkg#config состояния:

Таким образом, вы должны указать файлы — скрипты и ресурсы — вручную в свойстве pkg вашего файла package.json.

 "pkg": {
    "scripts": "build/**/*.js",
    "assets": "views/**/*"
}
  

Вы также можете указать массивы глобусов:

 "assets": [ "assets/**/*", "images/**/*" ]
  

Просто не забудьте вызвать pkg package.json или pkg . для использования скриптов и записей ресурсов.

Комментарии:

1. Итак, в моем проекте нет папки assets/.. или scripts/.. . Я пытался использовать что-то подобное "pkg": { "uploads/**/*} правильно? У меня все еще возникает та же проблема при использовании этого.

Ответ №2:

Вероятно, вы используете что-то подобное в своем скрипте (я предполагаю, поскольку вы не предоставили эту часть кода)

 app.use(express.static(__dirname '/uploads'));
res.sendFile(path.join(__dirname '/uploads'));
  

__dirname будет неправильным, когда вы упакуете свой .exe, избавьтесь от него везде и замените на ./

 app.use(express.static('./uploads'));

res.sendFile(path.join('./uploads'));
  

Что-то вроде этого. У меня это сработало.

Удачи!