由于IISNode,我在Azure WebSites上运行Node应用程序时遇到了一些问题。基本上问题是我依赖端口号是一个数字,坦率地说在Azure上不是这种情况......这里端口号实际上是一个命名管道,其值为\\.\pipe\76deda07-ef5c-4539-87d8-755ede772521
。因此,以下代码将内部请求路由回localhost上定义的HTTP路由,但不起作用:
function getFromLocalRoute(restPayloadObject, callback) {
request.get({
uri : util.format('http://localhost:%s/api/%s', app.config.port, restPayloadObject.servicepath),
json : true
}, callback);
}
毫无疑问,这在* nix系统上运行良好,但现在我需要找到一种很好的处理方式,这种方法也适用于Windows。
我所追求的基本上是这样的:
它不必使用HTTP。我只是想重用通过使用Express处理我的路由逻辑,解析所有内容,将其发送到正确的模块等隐含的逻辑。所以如果有一种方法可以在不使用HTTP的情况下调用Express Router
相关:
答案 0 :(得分:0)
Windows Azure网站使用IISNode在IIS内部托管Node进程。您的Node站点实际上是一个命名管道,它接收传入的请求,而不是像在本地运行或自己托管时使用的TCP端口。即使你可以打开一个TCP端口,Azure网站实际上只适用于传统网站,而且没有办法向外界开放端口。
因为我们会收到如下错误消息:
Error: connect EACCES 127.0.0.1:80
at Object.exports._errnoException (util.js:837:11)
at exports._exceptionWithHostPort (util.js:860:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1060:14)
作为一种解决方法,如果您需要的URL在您的expressjs项目中,您可以利用res.redirect或自定义内置函数来处理params。或者,您可以将项目迁移到Azure VM,从而为您的需求提供更大的灵活性。
答案 1 :(得分:0)
我发布了与此问题相关的another question,我发现了适用于此问题的体面编程解决方案。
事实证明,可以通过使用带有存根请求和响应对象的(非公共/非官方)express.Router
方法直接调用Router#handle
。有关该方法的详细信息,请参阅this answer。
It turned out命名管道方法不可行,因此直接调用路由器似乎最适合手头的问题。