【问题标题】:node.js - get value of json requestnode.js - 获取 json 请求的值
【发布时间】:2014-11-11 01:46:56
【问题描述】:

如何在 node.js 中使用 ajax 获取客户端发送的 json 数据的值? 我尝试了很多示例和问答,但仍然无法正常工作。 我对 node.js 完全陌生,所以我的问题可能很愚蠢。 我在下面得到了我的代码。请指出我在哪里以及出了什么问题。我完全迷路了。

我需要的是来自 json 数据的值“TEST”。

我试过 req.body.data

客户端 [html]

$.ajax({
      type:"POST",
      url: 'http://localhost:8080/getFromDB',
      //data:JSON.stringify({"sql":"SELECT * FROM Track"}),
      data: '{"data": "TEST"}',
      success:function(data) {
        $('#disco').html(data);
      },
      error:function() {
        $('#disco').html('Error connecting to the server.');
      }
    });

node.js

var app   = module.exports = require('appjs');
var http  = require('http');
var url   = require('url');
var fs    = require('fs');

http.createServer(function (req, res) {

  var path = url.parse(req.url).pathname;
  var value;

  if(path == "/getFromDB") {

    // req = JSON.parse(req);
    // var testshit1 = parser(req.data);

    req.on('data', function (data) {
      value = JSON.parse(data);
    });

    // ------- e.o test -------

    res.writeHead(200, {
      'Content-Type': 'text/plain',
      'Access-Control-Allow-Origin' : '*',
      'Access-Control-Allow-Methods': 'GET,PUT,POST,DELETE'
    });
    res.end('value = ' + value);
  }

}).listen(8080);

【问题讨论】:

    标签: javascript jquery json node.js appjs


    【解决方案1】:

    req.on('data', function(data) { ... })中的dataBuffer,需要先转换成字符串。此外,您可能会收到任意数量的 data 事件,这些事件需要组合在一起以构成请求正文。考虑到这些,步骤如下:

    1. 创建一个变量来保存您的请求正文。
    2. 当您在 req 对象上收到 data 事件时,将收到的数据附加到保存请求正文的变量中。
    3. 当您在req 对象上收到end 事件时,将您的请求正文转换为带有JSON.parse 的对象。

    类似这样的:

    var body = ""; // request body
    
    req.on('data', function(data) {
        body += data.toString(); // convert data to string and append it to request body
    });
    
    req.on('end', function() {
        value = JSON.parse(body); // request is finished receiving data, parse it
    });
    

    此外,一旦您收到整个请求正文,您很可能只想回复 res.writeHeadres.end 等,因此请在请求的 end 事件处理程序中执行此操作:

    req.on('end', function() {
        value = JSON.parse(body); // request is finished receiving data, parse it
    
        res.writeHead(200, {
          'Content-Type': 'text/plain',
          'Access-Control-Allow-Origin' : '*',
          'Access-Control-Allow-Methods': 'GET,PUT,POST,DELETE'
        });
        res.end('value = ' + value);
    });
    

    【讨论】:

    • 嗨@Mike S,您提供的代码有效!但是,该值现在更改为 'undefined' 到 '[Object Object]。可以帮助我对此有何建议吗? ^_^
    • 很有趣,当您调用 res.end() 时,您需要将 JSON 转换回字符串。试试:'value =' + JSON.stringify(value)
    • 天哪,我花了这么长时间才发现,我曾经使用querystring.parse(body),但它从来没有用过,但不知道有什么区别:\
    【解决方案2】:

    您在节点中的value 是一个对象。用他。 示例:

    req.on('data', function (data) {
          value = JSON.parse(data);
          console.log("SQL is " + value.sql);
        });
    

    【讨论】:

    • 仍然“未定义”。 :(
    【解决方案3】:

    我建议你使用本地 IP 而不是“localhost”。

    您可以使用 getJSON() 然后搜索结构,或者如果您知道值在哪里,直接访问它:

    $.getJSON('http://192.168.1.1:8080/getFromDB', function (data) {
             var myVar = data.features[0].TEST;
             });
    

    【讨论】:

      猜你喜欢
      • 2014-09-13
      • 1970-01-01
      • 2016-09-08
      • 2020-05-18
      • 1970-01-01
      • 1970-01-01
      • 2015-09-26
      • 1970-01-01
      • 2021-11-20
      相关资源
      最近更新 更多