#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'));
Что-то вроде этого. У меня это сработало.
Удачи!