我正在我的 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 的明确性更容易阅读,那么就不足以推荐它。