现在我正在编写一个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处于待处理状态,并且不再提供错误消息或详细信息。
代码有什么错误?非常感谢您的帮助。
答案 0 :(得分:0)
您需要告诉Express您已完成处理请求,例如。 res.send('hello')
或res.json(jsonObject)
。你应该在writeFile回调中调用它。