2012-08-22 45 views
0

我是學習AJAX和新開發web開發的新手,我無法讓本地服務器和遠程服務器處理髮布請求。我正在使用node.js和express模塊​​。使用node.js和express來處理POST請求

這裏是我的服務器代碼:

var express = require('express'); 

//start server 
var app = express.createServer(); 

//handle requests 
app.post('/hello', function(req, res){ 
    res.send("hello"); 
}); 

app.listen(8888); 

非常基本的,我知道。

var xhr = new XMLHttpRequest(); 
xhr.open('POST', 'localhost:8888/hello', true); 
xhr.send('name=me'); //body of request is irrelevant at this point 

當我將請求發送到我的本地機器,它返回:要測試這一點,我在Chrome(我已禁用跨來源政策來測試我的本地機器上)控制檯手動創建一個XMLHttpRequest立即說它失敗了。當我將請求發送到我的遠程服務器(其中localhost被我的服務器的IP替換)時,我沒有在控制檯中看到錯誤,但是當我檢查到xhr對象的狀態失敗時。

我不知道問題出在我寫服務器的方式,還是我發送請求到服務器的方式。但是,我一直在看教程和示例,這些示例顯示了像以上那樣的快速處理髮布請求,以及顯示發送POST請求的其他教程,就像我上面做的那樣。

發送和處理GET請求似乎工作正常。我肯定錯過了什麼。

謝謝,Xaan。

回答

2

您需要在您的HTTP URL,當你發出POST:

xhr.open('POST', 'http://localhost:8888/hello', true); 
+0

謝謝,這是問題所在!任何想法爲什麼?它適用於沒有'http://'的GET請求... – tborenst

+0

@Xaan URL的'host'至少需要'''''// localhost:3000/hello'作爲前綴。如果沒有,它將被視爲當前地址的相對URL - 保持'file://'這聽起來就像您正在使用的頁面。 –

1

如果調用js不是由Web服務器提供服務,則XHR不起作用。

你應該做的是添加您的Express服務器

app.get('/', function(req, res) { 
    res.sendfile('index.html'); 
}) 

哪裏的index.html包含您的測試代碼的簡單途徑。

如果你想從不同的Web服務器來測試,並與惱人的跨來源政策,你也可以使用這個超級有用的命令將在當前文件夾中生成一個Web服務器必須面對:

python -m SimpleHTTPServer 

我用它所以經常是我居然別名是:

alias www='python -m SimpleHTTPServer' 
+0

感謝您的回覆。我正在嘗試測試您的解決方案。我有本地機器運行一個節點服務器,該服務器重定向到index.html文件,我的測試代碼用於測試遠程計算機上的服務器。但是,xhr的對象狀態是[Exception:DOMException]。不應該這樣工作嗎?再次感謝。 – tborenst

+0

順便說一句,你應該讓jQuery進行xhr調用。它提供了良好的包裝和X平臺。 – 3on