我有一个相当标准的 MEAN 项目设置,使用 yeoman 使用 angular-fullstack 生成器。
我发现,当获取较大(超过 65536 字节)的 json 结果时,它使用 gzip 进行编码并分 block ,但返回的 json 在 chrome 中查看或由我的 Angular 客户端 $resource 使用时无效,因为它包含两个响应!
例如 {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);
});
};
如果我对数据进行切片使其不分 block ,则 json 格式良好。我检查了 mongo db,那里的数据也正常,调试 worlds
变量,我可以 JSON.stringify 并获得预期的字符串结果而没有任何重复。但是在它发送的那一刻,我在响应中得到了双倍的 json 结果。
更新评论
Angular 全栈 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;
}
最佳答案
看起来这是由压缩中间件引起的,从 express 配置中删除 app.use(compression());
似乎可以解决这个问题。
关于javascript - JSON响应上的重复 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24836097/