Назад | Перейти на главную страницу

Как настроить .htaccess для запуска JavaScript с узлом как CGI

Я тестирую это на своем Linux localhost.

Вот что я пытаюсь:

balter@spectre:/var/www/html$ cat .htaccess
Action cgi-node "/usr/bin/env node"
AddHandler cgi-node .js
balter@spectre:/var/www/html$ ls -al hello.js
-rwxr-xr-x 1 balter balter 99 Oct 31 13:17 hello.js
balter@spectre:/var/www/html$ cat hello.js
#!/usr/bin/env node

console.log("Content-Type: text/html");
console.log("hello from javascript");
balter@spectre:/var/www/html$ node hello.js
Content-Type: text/html
hello from javascript

Когда я приезжаю localhost/hello.js все, что я вижу, это содержимое hello.js

ДОБАВЛЕНИЕ Мне было интересно, действительно ли у меня включена cgi. Я подумал, что это так, потому что php работал. Но у меня не был включен модуль cgi или включен в apache.conf.

Я добавил cgi.load и добавил в мои apache.conf

###################################################################
#########     Adding capaility to run CGI-scripts #################
ServerName localhost
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
Options +ExecCGI
AddHandler cgi-script .cgi .pl .py .js

Теперь я получаю

Запрещено

У вас нет разрешения на доступ к /hello.js на этом сервере. Сервер Apache / 2.4.18 (Ubuntu) на порту 80 localhost

Кстати, то же самое с аналогом hello.py.

Я знаю, что об этом спросили почти 2 года назад, но на случай, если кто-то еще придет сюда в поисках способа написать очень простой CGI с использованием узла:

В Общий интерфейс шлюза требуется пустая строка между заголовками и содержимым.

В приведенном выше примере сценария можно исправить, добавив \n до конца Content-Type заголовок:

#!/usr/bin/env node

console.log("Content-Type: text/html\n");
console.log("hello from javascript");

Или добавив пустой console.log() между заголовками и содержимым:

#!/usr/bin/env node

console.log("Content-Type: text/html");
console.log();
console.log("hello from javascript");

Они оба функционально эквивалентны, так что это действительно вопрос личного стиля.