1

我正在尝试通过熟悉 node.js(我是一名专业的 .NET 开发人员)来扩展我的视野,但我遇到了我认为是一个简单的 POST 示例的问题。我确实有使用 jQuery 的经验,所以在我正在构建的这个示例网站中,node.js 是我相对未知的一个。

node.JS 服务器代码:

var express = require('express');
var app = express();

app.configure(function() {
    app.use(express.bodyParser());
    app.use(app.router);
    app.use(express.logger());
});

app.use(express.static(__dirname + '/public/PRB_Presentation'));

app.post('/GetPage', function(request, response){
    console.log(request.body.pageNumber);
    response.send(request.body.pageNumber);
});

var port = 80;
app.listen(port);
console.log('Listening on port: ' + port);

我的客户端 jQuery 逻辑:

function getPage(pageNumber){
        $.ajax({
            url: '/GetPage',
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            data: JSON.stringify({ pageNumber: pageNumber })
        }).done(function(data, textStatus, jqXHR) {
            console.log("Success: " + data);
        }).fail(function(jqXHR, textStatus, errorThrown) {
            console.log("Error: " + errorThrown);
        }).always(function() {
            console.log("Done!");
        })
        ;
    };

在我的 node.js 服务器运行时,我确实看到了我发送的页码,将输出正确地发送到控制台窗口,但这就是我在客户端得到的:

错误:未知
完成!

我假设我在这里做了一些非常简单的错误,但我无法弄清楚。

编辑

  • request.body.pageNumber 包含单个数字(例如,2)
  • fail() 中的 textStatus 只是“错误”
4

1 回答 1

5

您收到错误的原因是因为您在res.send(). 这样做会将值作为 HTTP 状态代码而不是响应正文发送。

res.send(200);   -> HTTP 200 OK
res.send('200'); -> 200

send()方法接受两个参数。如果您提供一个并且它是一个数值,那么它将被解释为要发送的 HTTP 状态代码。您可能会发现更适用于您正在尝试做的事情是res.json().

app.post('/path', function(req, res) {
  res.json(request.body.page);
});

否则,强制将数字作为字符串发送:

app.post('/path', function(req, res) {
  res.send('' + request.body.page);
});
于 2013-11-06T03:33:25.667 回答