在JSON响应上重复块

我已经有了一个相当标准的MEAN项目设置,使用yeoman的angular-fullstack生成器。

我发现,当获取大于65536字节的json结果时,它使用gzip和chunked进行编码,但返回的json无效,无论是在chrome中还是由我的angular度客户端$资源使用,因为它包含TWO答复! 例如[{..},{..}][{..},{..}]对于一个数组[{..},{..}][{..},{..}] {name:'hi'}{name:'hi'}对于一个单一的id或[{..},{..}][{..},{..}]

服务器API端点是从angular-fullstack生成器自动生成的,如下所示:

 // Get list of worlds exports.index = function(req, res) { World.find(function (err, worlds) { if(err) { return handleError(res, err); } res.json(200, worlds); }); }; 

如果我切片的数据,所以它不分块,那么JSON格式良好。 我已经检查了mongo数据库,数据也没有问题,debuggingworldsvariables,我可以JSON.stringify并得到预期的string结果没有任何重复。 但是发送的那一刻,我得到了json响应结果的两倍。

更新评论

angular-fullstack 2.0.4

该模式如下所示:

 'use strict'; var mongoose = require('mongoose'), Schema = mongoose.Schema; var WorldSchema = new Schema({ name: String, info: String, active: Boolean, tiles: [Schema.Types.Mixed] }); module.exports = mongoose.model('World', WorldSchema); 

播种:

  var newWorld = new WorldModel({ _id: planet._objectId, name: "SimDD World", tiles : seed() }); newWorld.save(); ... var seed = function () { var data = []; for (var i = 0; i < planet.HEIGHT; i++) { for (var j = 0; j < planet.WIDTH; j++) { data.push({ coords:{ x:i, y:j }, type:'.' }); } } return data; } 

看起来这是由压缩中间件造成的,除去app.use(compression()); 从明确的configuration似乎解决这个问题。

这个问题在浏览器中看到,而不是在邮递员中看到。 我检查了HTTP请求标题,当我在postman中添加'Accept'标题作为html时,同样的问题也出现在邮递员上。 所以我相信浏览器处理不同与接受types与HTML。

这对你有用吗? 我不明白为什么它不应该。
我假设你有一个行星物体,有:
HEIGHTWIDTH_objectId属性。

记住,如果你修改一个混合types,你需要告诉mongoose的值改变,然后保存它。
http://mongoosejs.com/docs/schematypes.html#mixed

 var WorldModel = require('../api/world/world.model'); var planet = require('planetSeedData'); var seed = function() { var data = []; for (var i = 0; i < planet.HEIGHT; i++) { for (var j = 0; j < planet.WIDTH; j++) { data.push({ coords: {x:i, y:j}, type: '.' }); } } return data; }; var myPlanet = { _id: Mongoose.Types.ObjectId(planet._objectId), name: "SimDD World", tiles : seed() }; WorldModel.create(myPlanet); // if modified, you would do something like: // WorldModel.markModified('tiles'); // WorldModel.save(); 
 // app.use(require('connect-livereload')()); 

在构build我的angular-fullstack应用程序(感谢DaftMonk)后,我遇到了同样的问题,经过一些使用node-inspector的大量debugging后,JSON数据被传递到livereload模块并在出现时被复制。 禁用这个中间件消除了我的问题。