如何配置 .htaccess 以使用节点作为 CGI 运行 JavaScript

如何配置 .htaccess 以使用节点作为 CGI 运行 JavaScript

我正在我的 Linux 本地主机上测试这个。

这就是我正在尝试的:

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) 服务器位于 localhost 端口 80

顺便说一下,与等效的相同hello.py

答案1

我知道这个问题是两年前问的,但以防万一有人来这里寻找使用节点编写一个非常简单的 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");

它们在功能上是等效的,所以这实际上是一个个人风格的问题。#1 在微观上更有效率,但如果你发现 #2 的明确性更容易阅读,那么就不足以推荐它。

相关内容