2016-10-31 14 views
5

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

Trả lời

0

Bạn cần cài đặt Yêu cầu ứng dụng định tuyến here, và các tài liệu here.

Chỉ cần đặt các tệp phía máy chủ của bạn trong/server sẽ không hoạt động. Bắt đầu máy chủ tốc hành của bạn, giả sử nghe theo số http://localhost:3200/, yêu cầu tuyến '/' đến 'localhost: 3200' sẽ chỉ định tuyến mỗi yêu cầu đến máy chủ tốc hành của bạn.

+0

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

+0

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

Các vấn đề liên quan