我在web.config文件中使用了一个重写规则,用于在issnode下运行的节点应用程序指向我的server.js文件。 myapp / *指向server.js。
<rule name="myapp" enabled="true">
<match url="myapp/*" />
<action type="Rewrite" url="server.js" />
</rule>
这一直很好www.mywebsite.com/myapp/会加载运行我的应用程序。我想要的是从网站的根目录进行重定向,以便www.mywebsite.com/运行我的应用程序。所以我改变了我的web.config文件
<rule name="myapp" enabled="true">
<match url="/*" />
<action type="Rewrite" url="server.js" />
</rule>
所以这是运行server.js并提供我的静态html文件,唯一的问题是引用我的html文件中的任何外部文件(css,js,images等)每个请求只需500秒。我用它来提供静态文件
var libpath = require('path');
var _path = "."; <-- This seems to be the problem
var uri = url.parse(req.url).pathname;
var filename = libpath.join(_path, uri);
fs.readFile(filename, "binary", function (err, file) {
if (err) {
res.writeHead(500, {
"Content-Type": "text/plain"
});
res.write(err + "\n");
res.end();
return;
}
var type = mime.lookup(filename);
res.writeHead(200, {
"Content-Type": type
});
res.write(file, "binary");
res.end();
});
break;
所以我的问题是如何指向我的节点app / server的root来提供静态文件。
由于
城野
答案 0 :(得分:5)
在iisnode中提供静态内容的最佳方法是配置URL重写模块,以便IIS静态文件处理程序处理静态内容而不是node.js的请求。让IIS提供静态内容比使用任何node.js机制提供这些文件具有很大的性能优势,因为内核级别优化了缓存,而且不必破解JavaScript代码。
对于实现此目的的样板文件web.config配置,请参阅https://github.com/tjanczuk/iisnode/issues/160#issuecomment-5606547
答案 1 :(得分:3)
我使用建议的规则配置时遇到了一些问题,所以我做了一些更改:
<system.webServer>
<handlers>
<clear />
<add name="iisnode" path="/index.js" verb="*" modules="iisnode" />
<add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
</handlers>
<rewrite>
<rules>
<rule name="static">
<action type="Rewrite" url="www{REQUEST_URI}" />
</rule>
<rule name="serve-static" stopProcessing="true">
<conditions logicalGrouping="MatchAny">
<add input="{REQUEST_FILENAME}" matchType="IsFile" />
<add input="{REQUEST_URI}" pattern="^/www/$" />
</conditions>
</rule>
<rule name="node">
<action type="Rewrite" url="index.js" />
</rule>
</rules>
</rewrite>
</system.webServer>
请注意,iisnode处理程序路径设置为www
,这似乎消除了与同名客户端文件的冲突。