javascript - jQuery POST 到 Node.JS 失败

标签 javascript jquery node.js

我试图通过熟悉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服务器运行时,我确实看到我发送的页码正确地输出到控制台窗口,但这就是我在客户端得到的:

Error: unknown
Done!

我认为我在这里做了一些非常简单的错误,但我不太明白。

编辑

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

最佳答案

您收到错误的原因是您在 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);
});

关于javascript - jQuery POST 到 Node.JS 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19803421/

相关文章:

javascript - Redis ReJSON 系统地返回两个错误 : missing key at non-terminal path and new object must be created at root

javascript - node.js 中的 SSL 证书错误

javascript - 如何在父 div 的中间重叠两个位置相对的 flexbox 子项?

javascript - 编辑 HTML/CSS 主题但似乎无法使其显示已售罄

javascript - 向 jasmine 添加固定装置/设置 Jasmine-Jquery

jquery - 修复 iOS 视口(viewport)以防止 'drag' 效果

javascript - 当选择其他选择选项时,用变量值更新选择列表?

javascript - 在 table 上创建抽屉效果

jquery - 如何使用 JQuery 在文本框中的每个逗号后自动插入空格?

node.js - 使用给定的 uid 首次插入 Cloud Firestore 文档时触发 Firebase Cloud 函数