我试图在iis上运行“ Hello World”示例node.js服务器:

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


使用此web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <add name="httpplatformhandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" requireAccess="Script" />
        </handlers>
        <httpPlatform stdoutLogEnabled="true" stdoutLogFile="node.log" startupTimeLimit="20" processPath="C:\Program Files\nodejs\node.exe C:\Users\username\Tests\nodeHandlerTest\app.js">
            <environmentVariables>
            </environmentVariables>
        </httpPlatform>
    </system.webServer>
</configuration>


它不起作用!知道我的web.config文件是什么问题吗?

最佳答案

对于端口,模块将在您可以使用%HTTP_PLATFORM_PORT%访问的随机端口上启动进程。因此,您应该将其映射到Node env变量,否则当IIS尝试在其回收时尝试启动多个Node进程时,您将获得地址使用错误。
app.js的路径应在arguments属性中指定。


因此,您的app.js应该如下所示:

var http = require('http');
var server = http.createServer(function(req, res) {
    res.writeHead(200, {"Content-Type":"text/plain"});
    res.end("Hello World\n");
})

var port = process.env.PORT || 3000;
server.listen(port);
console.log('server is running on port: ' + port);


web.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <add name="httpplatformhandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" requireAccess="Script" />
        </handlers>
        <httpPlatform
           stdoutLogEnabled="true"
           stdoutLogFile=".\node.log"
           startupTimeLimit="20"
           processPath="C:\Program Files\nodejs\node.exe"
           arguments=".\app.js">
            <environmentVariables>
                <environmentVariable name="PORT" value="%HTTP_PLATFORM_PORT%" />
                <environmentVariable name="NODE_ENV" value="Production" />
            </environmentVariables>
        </httpPlatform>
    </system.webServer>
</configuration>


请注意,从v1.2开始,如果路径以“。”开头,则支持相对路径。该路径被认为是相对于站点根目录的,因此是log和app.js文件的.\。更多信息here

关于node.js - 使用HttpPlatformHandler在iis上运行node.js应用程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33615918/

10-17 02:53