Node.js Сервер работает из подпапки

Итак, я очень опаздываю на вечеринку Node.js. В основном потому, что меня никто не пригласил... Спасибо. Тем не менее, я начинаю работать над этим. Я пришел из ASP классического фона, поэтому есть несколько вещей, которые мне еще предстоит понять.

Если кто-то может указать мне в правильном направлении, это было бы здорово. Спасибо заранее.

Итак, я настраиваю сервер стандартным способом.

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

Это дает мне приятную страницу в http://127.0.0.1:1337/. Прекрасный.

Сайт, который я создаю, находится в http://newsite.dev/. Возможно ли (не смеяться) настроить сервер node для запуска из подпапки моего сайта, скажем http://newsite.dev/api/?

Итак, любые запросы из клиентских сценариев могут быть отправлены на /api/, а не на http://127.0.0.1:1337/.

EDIT: Сделать вещи немного яснее. В настоящее время я запускаю настраиваемую фреймворк PHP http://newsite.dev/, но хочу отказаться от этой долгосрочной перспективы. В то же время необходимо запустить их параллельно.

ИЗМЕНИТЬ Опять же, чтобы уточнить, я запускаю все на своей OS X, поэтому установка apache (MAMP).

Ответ 1

У вас есть множество опций, но ни один из них не позволит вам использовать порт 80 для вашего приложения Node на том же сервере, что и Apache + PHP без проксирования.

Два ваших лучших варианта:

1) настройте новый поддомен - создайте новую запись DNS для node.newsite.dev и направьте этот поддомен на совершенно другой IP-адрес на другом сервере (хотя технически вы можете настроить два IP-адреса на том же сервере, см. здесь), затем Node можно запустить на порту 80 на своем отдельном сервере

2) выполните Apache на порту 80 на /path/to/apache/publicdir/newsite.dev и выполните Node на порт 1337 на /path/to/ node/application/newsite.dev, то вы можете получить доступ к файлам apache по адресу http://newsite.dev и к вашему приложению Node в http://newsite.dev:1337

Независимо от того, что вы делаете, не помещайте приложение Node в подкаталог, о котором знает Apache, если вы не хотите публично публиковать эти .js файлы.

ИЗМЕНИТЬ, ЧТОБЫ ОТВЕТИТЬ К ВАШЕМУ ИЗМЕНЕНИЮ: Если ваша цель - перейти на Node исключительно и в конечном итоге отключить Apache + PHP, то лучше всего использовать субдомен. Недостатком является то, что вам придется использовать полностью квалифицированные ссылки во всем мире. Положительным моментом является то, что, когда вы чувствуете, что ваше приложение находится в node, вы можете найти/заменить (#//(www\.)?newsite.dev#, '//apache.newsite.dev') и (#//node.newsite.dev#, '//newsite.dev'), а затем, когда вы полностью отключитесь от Apache, просто закройте его.

Ответ 2

Вы просите создать виртуальный каталог и да, вы можете установить Node.js с PHP, но вы должны немного прочитать.

Виртуальный каталог - это веб-сайт, который живет в папке, например www.yourwebsite/myotherwebsite.

Здесь, как установить это в Apache.

http://httpd.apache.org/docs/current/vhosts/examples.html

Здесь, как установить это в IIS.

http://technet.microsoft.com/en-us/library/cc771804(v=ws.10).aspx

Затем вам нужно подключить Node.js с помощью Apache или IIS. Здесь больше инструкций.

Linux: Как реализовать виртуальные каталоги с Node.js и выражать?

Windows: http://www.hanselman.com/blog/InstallingAndRunningNodejsApplicationsWithinIISOnWindowsAreYouMad.aspx

Ответ 3

Только один сервер может прослушивать порт за раз. У вас не может быть Node.js и другого сервера на одном и том же порту.

Лучше всего настроить другое имя хоста для вашего другого сервера.

Если вы не можете этого сделать, стандартный способ - прокси-запросы от одного сервера к другому. Это относительно легко сделать, но вы не указали, на каком сервере вы работаете, поэтому нельзя быть более конкретным.