Tôi có trang web của tôi hoạt động trong phạm vi nhanh. Nhưng bây giờ tôi cần lưu trữ nó trên IIS. Làm thế nào tôi có thể nhận được định tuyến của tôi để làm việc với IISNode?Cách lưu trữ dịch vụ và nội dung tĩnh trong iisnode
Tôi đã có thể di chuyển nội dung tĩnh của mình sang thư mục/công khai (html, giao diện người dùng js, v.v.). Tôi không muốn làm điều này, nhưng có phần đó hoạt động.
Tôi đã chuyển logic phía máy chủ sang/server.
Trước đây tôi đã có định tuyến kiểu API Web API hoạt động, nơi dịch vụ của tôi được lưu trữ tại/api. Tôi đã chuyển chúng đến/server/api.
Bất cứ khi nào tôi cố gắng yêu cầu API của mình, tôi nhận được 404. Làm cách nào để làm việc này với IISNode?
app.use("/api", require("./api"));
// routes/api/index.js
var router = require('express').Router();
router.use('/questionsets', require('./questionsets'));
module.exports = router;
var router = require('express').Router();
router.use('/questionsets', require('./questionsets.js'));
module.exports = router;
// routes/api/questions.js
var router = require('express').Router();
router.get('/', function (req, res) {
...
});
router.get('/:id', function (req, res) {
...
});
module.exports = router;
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<security>
<requestFiltering>
<hiddenSegments>
<remove segment="bin" />
</hiddenSegments>
</requestFiltering>
</security>
<handlers>
<add name="iisnode" path="bin/www" verb="*" modules="iisnode" />
</handlers>
<iisnode loggingEnabled="false" />
<httpErrors errorMode="Detailed" existingResponse="Replace">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/" responseMode="ExecuteURL" />
</httpErrors>
<rewrite>
<rules>
<rule name="LogFile" patternSyntax="ECMAScript" stopProcessing="true">
<match url="iisnode" />
</rule>
<rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
<match url="^bin\/www\/debug[\/]?" />
</rule>
<rule name="StaticContent" patternSyntax="ECMAScript" stopProcessing="true">
<match url=".*" />
<action type="Rewrite" url="{C:1}" logRewrittenUrl="true" />
<conditions>
<add input="{REQUEST_URI}" pattern=".*?\/(.*)" />
</conditions>
</rule>
<rule name="DynamicContent" patternSyntax="ECMAScript">
<match url=".*" />
<conditions>
<add input="{{REQUEST_FILENAME}}" matchType="IsFile" negate="True" />
</conditions>
<action type="Rewrite" url="server/app.js" logRewrittenUrl="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Source for url rewriting configuration
Tôi không nên mở trình duyệt vào Cổng IIS - không phải là cổng chuyển phát nhanh? Và tôi có cần phải bắt đầu Express, hoặc IIS sẽ bắt đầu nó cho tôi? – Hoppe
Thực ra bạn cần phải bắt đầu cả hai. Express chính nó là một máy chủ web chỉ cần liên kết IIS. Mở IIS, có nghĩa là nó bắt đầu chấp nhận yêu cầu và định tuyến các yêu cầu đó để thể hiện. Vì vậy, có phải là một thể hiện đã chạy. Trong trường hợp này, mở trình duyệt tới cổng IIS (ví dụ: http: //a.b.c: 80), và cấu hình IIS để nó định tuyến các yêu cầu để thể hiện cổng, như 'localhost: 3000'. – YLS