2016-03-14 2 views
0

Я запускаю сервер node.js. В узле я требую и запускаю модуль с помощьюОшибка Node.js, включая js файл - файл не найден

var h = require('h.js'); 
h.hello(); 

Это печатает Hello World на консоли. Тем не менее, я хочу иметь возможность запускать код из h.js со страницы (entrypage.html) в моем браузере. Я пытаюсь импортировать его на

<script type="text/javascript" src="/node_modules/h.js"></script> 

Однако это дает ошибку 404 при запуске на локальном хосте.

GET http://localhost:8080/node_modules/h.js 

Как мне получить доступ к этому javascript-файлу на HTML-странице?

В моей файловой структуре есть корень с html /, js /, node_modules/и server.js. HTML-страница находится внутри html /, файл js в node_modules/

EDIT: Я использую стек MEAN для этого - MongoDB, Express.js, Angular.js и Node.js.

+0

Я согласен с @rgvassar, вы можете/не должен быть node_modules сервера с nodejs. Вероятно, вы захотите создать псевдоним для своих узлов в настройках вашего http-сервера. Например, с помощью nginx создайте перенаправление '/' маршрута на ваш 'localhost: 3333' (где' 3333' - ваше приложение nodejs) и '/ public /', обслуживающий все файлы, найденные в каталоге/node_modules, например –

+0

Предполагая, что ваш сервер может обслуживать JS-файлы, ссылка на ваш файл из браузера должна быть 'src =" node_modules/h.js "' (без косой черты). Я только что проверил это с помощью кода sig_pad, с которым вы связались. [Вот код сервера (не экспресс), который я использовал] (https://jsfiddle.net/ufhqh520/). – Andy

+0

Энди, связывание файлов, как вы сказали, не работает для меня. Также в вашем jsfiddle отсутствует файл html и файл signature_pad.js. Это намеренно? – WarSame

ответ

1

Должно быть возможно обслуживать файл с использованием express.static (пример: app.use('/node_modules/', express.static(__dirname + '/node_modules/'));), но я настоятельно рекомендую не обслуживать node_modules и файлы, относящиеся к файлу в интерфейсе!

+0

Это работает, спасибо! Я немного смущен Томасом/публикой/предложением выше.Должен ли я помещать свои общедоступные модули в каталог/public /, а остальные - в node_modules /? Или есть способ связать только часть файла node_modules с интерфейсом? – WarSame

+0

Что сказал Крис. Однако, если вы решите пойти с решением об экспонировании вашей папки node_modules через http, как было предложено, вам нужно будет настроить внешний интерфейс, чтобы указать на файл, так как express сделает всю папку node_modules доступной под root (/), поэтому href будет «/h.js», а не «node_modules/h.js» – burnedikt

+0

@WarSame. Если вы хотите использовать ваши node_modules во внешнем интерфейсе, наилучшей практикой будет использование связующего, например, браузера или webpack. – burnedikt

0

Чтобы быть честным, я не совсем уверен, чего вы пытаетесь достичь. Я полагаю, что вы хотите запустить код в браузере так же, как запустить код в среде node.js, используя require, чтобы включить такие пакеты, как h.js от npm.

Если это то, что вы хотите сделать, я бы рекомендовал использовать такой инструмент, как browserify или webpack, который собирает ваш код и помещает его в файл, который затем можно использовать в веб-браузере.

+0

Да, я хочу запустить код в своем браузере. Чтобы дать вам полное представление о моей проблеме: я пытаюсь использовать [этот файл подписи для подписи] (https://github.com/szimek/signature_pad), чтобы иметь подписи в моей веб-форме. Однако для этого мне нужно включить исходный файл .js. Поэтому я думал, что лучший способ - включить файл .js с обычным тегом