JSON响应上的重复块

Joe*_*Joe 11 javascript json chunked-encoding node.js angularjs

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

我发现的是,当获取一个较大的(超过65536字节)json结果时,它使用gzip和chunked进行编码,但返回的json无法在chrome中查看或由我的angular client $ resource使用,因为它包含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);
  });
};
Run Code Online (Sandbox Code Playgroud)

如果我对数据进行切片以使其不被分块,那么json就会很好地形成.我已经检查了mongo db并且数据也正常并且调试worlds变量,我可以JSON.stringify并获得预期的字符串结果而没有任何重复.但是当它被发送的那一刻,我正在将响应的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);
Run Code Online (Sandbox Code Playgroud)

种子:

 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;
}
Run Code Online (Sandbox Code Playgroud)

Daf*_*onk 8

看起来这是由压缩中间件引起的,app.use(compression());从快速配置中删除似乎解决了这个问题.