在AJAX和Node.js中使用post请求时,将结果保存在JSON文件中

时间:2018-04-12 12:28:53

标签: javascript json node.js ajax

现在我正在编写一个javascript来跟踪用户的系统配置,例如屏幕分辨率统计。我首先将AJAX文件写入对象形式的集合,并使用node.js获取请求,最后将输入写入服务器端的json文件。

我的AJAX代码如下:

  try{

  window.onload = function(url, callback, data, x) {
  var sWidth = screen.width;
  var sHeight = screen.height;
  var sColor = screen.colorDepth;
  var sPlatform = window.navigator.platform;
  var sLanguage = navigator.language;
  var sTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;

  var info = {
    width: sWidth,
    height: sHeight,
    color: sColor,
    platform: sPlatform,
    language: sLanguage,
    timezone: sTimeZone
  };

    //var http = new XMLHttpRequest();
    var http = new(this.XMLHttpRequest || ActiveXObject)('MSXML2.XMLHTTP.3.0');

    http.onreadystatechange = function () {
      if (http.readyState == 4 && http.status == 200) {
        console.log(JSON.parse(http.response));
      }
    };

    http.open("POST", "http://127.0.0.1:8080/ReturnFingerprint.json", true);
    http.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
    http.setRequestHeader("Content", "application/x-www-form-urlencoded")
    http.send(info);
  }
} catch (e) {
  console.log(e);
}

以下Node.js代码接管AJAX请求

var express = require('express');
var bodyParser = require('body-parser');
var app= express();
var urlencodedParser = bodyParser.urlencoded({ extended: false })

app.use(bodyParser.json());
app.options('/Fingerprint', cors()) ;

app.post('/Fingerprint', urlencodedParser, function(req, res, next) {
  if (!req.body) {
    var json = JSON.stringify(req.body);
    var fs = require('fs');
    fs.readFile('ReturnFingerprint.json', 'utf8', function readFileCallback(err, data){
    if (err){
        console.log(err);
        next(err)
    } else {
      data = JSON.parse(data);
      json = JSON.stringify(data);
      fs.writeFile('ReturnFingerprint.json', json, 'utf8', function writeFilecallback (err, data) {
        res.json(json)});
      });
    }
  }
  res.json(json);
});

当我检查json文件时,有第n个更新。

当我检查谷歌浏览器中的网络元素时,它返回ReturnFingerprint.json处于待处理状态,并且不再提供错误消息或详细信息。

代码有什么错误?非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您需要告诉Express您已完成处理请求,例如。 res.send('hello')res.json(jsonObject)。你应该在writeFile回调中调用它。