首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用IISNode为IISReactive前端提供Node服务

问如何使用IISNode为IISReactive前端提供Node服务
EN

Stack Overflow用户
提问于 2022-08-03 18:55:34
回答 1查看 192关注 0票数 0

我正处于项目的最后阶段。我有一个运行网站运行从NodeJS快车,这将服务于构建的创建-反应-应用程序的前端。现在,我需要将它配置为使用IISNode从IIS运行。我遵循了许多方向,但没有成功。IIS的原因是,只要服务器(Windows 2012 R2,IIS8)正在运行,站点就可以在没有登录和可用的情况下服务。

我读过无数的“黑客”,人们过去常常让他们自己的网站运行。

该节点正在侦听process.env.PORT 000-8000。当我直接从节点(npm )运行时,没有什么困难,但是当尝试从IIS执行同样的操作时,它会给我找到后端URL的错误。当试图作为一个单独的站点运行React时,我会得到一个404错误,搜索初始API,而当我在托管在"public“文件夹中的前端运行它时,我得到了403.14:无法列出目录内容。

我目前甚至不知道要显示哪些代码来解决这个问题,但我怀疑web.config可能是其中的一部分。我把它和我来自节点的bin/www文件一起包括在内。

代码语言:javascript
复制
//   /bin/www

#!/usr/bin/env node

/**
 * Module dependencies.
 */

var app = require('../app');
var debug = require('debug')('node-backend:server');
var http = require('http');

/**
 * Get port from environment and store in Express.
 */

var port = normalizePort(process.env.PORT || '8000'); // 
app.set('port', port);

/**
 * Create HTTP server.
 */

var server = http.createServer(app);

/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

/**
 * Normalize a port into a number, string, or false.
 */

function normalizePort(val) {
  var port = parseInt(val, 10);

  if (isNaN(port)) {
    // named pipe
    return val;
  }

  if (port >= 0) {
    // port number
    return port;
  }

  return false;
}

/**
 * Event listener for HTTP server "error" event.
 */

function onError(error) {
  if (error.syscall !== 'listen') {
    throw error;
  }

  var bind = typeof port === 'string'
    ? 'Pipe ' + port
    : 'Port ' + port;

  // handle specific listen errors with friendly messages
  switch (error.code) {
    case 'EACCES':
      console.error(bind + ' requires elevated privileges');
      process.exit(1);
      break;
    case 'EADDRINUSE':
      console.error(bind + ' is already in use');
      process.exit(1);
      break;
    default:
      throw error;
  }
}

/**
 * Event listener for HTTP server "listening" event.
 */

function onListening() {
  var addr = server.address();
  var bind = typeof addr === 'string'
    ? 'pipe ' + addr
    : 'port ' + addr.port;
  debug('Listening on ' + bind);
  console.log('Listening on ' + bind);
}
代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>

        <handlers>
            <add name="iisnode" path="app.js" verb="*" modules="iisnode" />
        </handlers>\
<!-- Removed in an effort to get a valid URL response -->
        <!-- <rewrite>
            <rules>
                <rule name="api">
                    <match url="/*" />
                    <action type="Rewrite" url="/*:8000" />
                </rule>
            </rules>
        </rewrite> -->

        <security>
            <requestFiltering>
                <hiddenSegments>
                    <add segment="node_modules" />
                </hiddenSegments>
            </requestFiltering>
        </security>
    </system.webServer>
</configuration>

请让我知道,如果有的话,其他数据是需要解决这一问题。

*编辑*通过修改web.config、启用该部分并将所有请求指向/app.js而取得的一些进展。下面是我现在收到的错误消息:

代码语言:javascript
复制
iisnode encountered an error when processing the request.

HRESULT: 0x2
HTTP status: 500
HTTP subStatus: 1002
HTTP reason: Internal Server Error
You are receiving this HTTP 200 response because system.webServer/iisnode/@devErrorsEnabled configuration setting is 'true'.

In addition to the log of stdout and stderr of the node.exe process, consider using debugging and ETW traces to further diagnose the problem.

The node.exe process has not written any information to stderr or iisnode was unable to capture this information. Frequent reason is that the iisnode module is unable to create a log file to capture stdout and stderr output from node.exe. Please check that the identity of the IIS application pool running the node.js application has read and write access permissions to the directory on the server where the node.js application is located. Alternatively you can disable logging by setting system.webServer/iisnode/@loggingEnabled element of web.config to 'false'.

它提到的两个链接都是10年前写的,没有给出我所能看到的有用的信息。

我还尝试将我的app.js代码包装在try/catch块中,并使用fs将错误日志写入文本文件,但没有成功。我相信在抛出错误之前,它甚至没有访问app.js。所有的路径都被赋予了对“每个人”的“完全控制”,仅仅是为了完全消除权限这一问题(目前)。

更新的web.config:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>

        <handlers accessPolicy="Execute">
            <add name="iisnode" path="app.js" verb="*" modules="iisnode" resourceType="Either" requireAccess="Execute" />
        </handlers>
        <rewrite>
            <rules>
                <rule name="api">
                    <match url="/*" />
                    <action type="Rewrite" url="/app.js/*" />
                </rule>
            </rules>
        </rewrite>

        <security>
            <requestFiltering>
                <hiddenSegments>
                    <add segment="node_modules" />
                </hiddenSegments>
            </requestFiltering>
        </security>
        <tracing>
            <traceFailedRequests>
                <add path="*">
                    <traceAreas>
                        <add provider="ISAPI Extension" verbosity="Verbose" />
                        <add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,FastCGI,WebSocket,ANCM,Rewrite,RequestRouting,iisnode" verbosity="Verbose" />
                    </traceAreas>
                    <failureDefinitions statusCodes="403.14" verbosity="Warning" />
                </add>
            </traceFailedRequests>
        </tracing>
        <iisnode watchedFiles="*.js" loggingEnabled="true" logDirectory="iisnode" devErrorsEnabled="true" />
    </system.webServer>
</configuration>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-08 12:12:09

我已经极大地修改了我的方法,并且现在在IIS上将应用程序作为两个站点运行。后端运行在端口90上,前端运行在端口80上,对端口90的请求在代码中硬编码。

现在可以确定cors()为什么不能正常工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73226459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档