2012-03-28 198 views
6

我開始嘗試使用iisnode和expressjs來創建一個類似REST的節點。所以在server.jsiisnode - IIS7.5:405執行PUT請求時不允許使用方法

我創建類似

app.put("/test", function(req, res){ 
    ... 
}); 

然而,當我執行PUT請求我從IIS 7.5的安裝得到了405 Method not allowed

關於如何解決這個問題的任何想法?

順便說一句,我用Google搜索已經並試圖用沒有成功在這裏和那裏添加PUT動詞的不同處理程序映射...

+0

這99%肯定的東西在IIS,所以我敢肯定,你錯過了一些東西在那裏。但是,我真的不能看你的IIS配置:-) – 2012-03-28 15:14:06

+0

這就是爲什麼我只是不明白爲什麼任何人,但一個受虐狂會想使用IIS來託管節點... – UpTheCreek 2012-03-29 07:14:44

+0

:)我想這只是因爲你可能有限制,只是運行IIS的Web服務器...在我的情況下,因爲我想部署它到AppHarbor,因爲它是更適合(從成本的角度來看)我的實驗(比Heroku)。 – Juri 2012-03-29 07:48:52

回答

21

我現在終於找到了解決這個問題的方法,即WebDavModule阻止了我的PUT請求。

要解決的問題:

  1. 打開IIS管理器
  2. 轉到您的應用程序配置和開放的 「模塊」
  3. 搜索WebDavModule並將其取出(右側菜單)

然後它爲我工作。

或者,在您的應用程序的web.config添加

<system.webServer> 
    ... 
    <modules> 
     <remove name="WebDAVModule"/> 
    </modules> 
</system.webServer> 
2

其中一個原因可能是你的web.config不映射特殊請求您正在對iisnode處理程序進行操作。 https://github.com/tjanczuk/iisnode/blob/master/src/samples/helloworld/web.config#L7

:在這種情況下,請求被不支持PUT方法,並用405

響應要解決這個問題,你需要這樣的iisnode程序登記在你的web.config靜態請求處理程序回升

此外,如果您打算使用不以node.js文件名稱結尾的URL(例如上面的例子),您將需要使用URL重寫模塊來告訴IIS確切的請求應該包含哪些請求他們的URL被重寫爲指向您的node.js入口點的URL。閱讀更多的:http://tomasz.janczuk.org/2011/08/using-url-rewriting-with-nodejs.html

+0

Thx爲您的答案,但我已經找到您的博客文章,並相應地配置我的應用程序......沒有任何成功。不過,我現在已經找到了解決方案。 (見下文) – Juri 2012-03-29 07:06:06