【问题标题】:Using node.js and express to process a POST request使用 node.js 和 express 处理一个 POST 请求
【发布时间】:2012-08-22 19:39:55
【问题描述】:

我是学习 AJAX 和 Web 开发的新手,我无法让本地服务器和远程服务器处理发布请求。我正在使用 node.js 和 express 模块。

这是我的服务器的代码:

var express = require('express');

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

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

app.listen(8888);

非常基本,我知道。为了对此进行测试,我通过 Chrome 中的控制台手动创建了一个 XMLHttpRequest(我已禁用跨域策略以在本地计算机上进行测试):

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

当我将请求发送到我的本地机器时,它会立即返回并说它失败了。当我将请求发送到我的远程服务器(其中 localhost 被我的服务器的 IP 替换)时,我的控制台中没有收到错误,但是当我检查 xhr 对象的状态时失败了。 p>

我不知道问题出在我的服务器的编写方式上,还是我向服务器发送请求的方式上。但是,我一直在查看显示像上面那样快速处理 post 请求的教程和示例,以及显示像上面那样发送 POST 请求的其他教程。

发送和处理 GET 请求似乎工作正常。我一定是错过了什么。

谢谢,Xaan。

【问题讨论】:

    标签: javascript http node.js post express


    【解决方案1】:

    您需要在发出 POST 时在您的 URL 中包含 HTTP:

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

    【讨论】:

    • 谢谢,这就是问题所在!知道为什么吗?它适用于没有“http://”的 GET 请求...
    • @Xaan URL 的host 至少需要以// 为前缀——//localhost:3000/hello。没有它,它将被视为当前地址的相对 URL - 保留 file:// 听起来您正在使用该页面。
    【解决方案2】:

    如果调用的 js 不是由网络服务器提供服务,则 XHR 不起作用。

    你应该做的是在你的 Express 服务器上添加一个简单的路由

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

    其中 index.html 包含您的测试代码。

    如果您想从不同的网络服务器进行测试并遇到烦人的跨域策略,您还可以使用这个超级有用的命令在当前文件夹中生成网络服务器:

    python -m SimpleHTTPServer
    

    我经常使用它,以至于我实际上给它起了别名:

    alias www='python -m SimpleHTTPServer'
    

    【讨论】:

    • 感谢您的回复。我正在尝试测试您的解决方案。我让我的本地机器运行一个节点服务器,该服务器重定向到 index.html 文件,我有我的测试代码来测试我的远程机器上的服务器。但是,xhr 的对象状态是 [Exception: DOMException]。这不应该工作吗?再次感谢。
    • 顺便说一句,您应该使用 jQuery 进行 xhr 调用。它提供了良好的包装和 x 平台。
    猜你喜欢
    • 2016-09-29
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 2013-03-03
    • 1970-01-01
    相关资源
    最近更新 更多