【已解决】console.log打印的结果是 [Object], 怎么让其显示具体的值?,环境为express+mongoose
发布于 3 个月前 作者 birdcoder 514 次浏览 来自 问答

使用的express+mongoose

var commentSchema = new mongoose.Schema({
    goodId: {type: String},
    username: {type: String},
    content: {type: String},
    createTime: {type: Date},
    follow: []
});
router.get('/comment/:goodId', function (req, res, next) {
    var content = {goodId: req.params.goodId};
    commentModel.find(content).lean().exec(function (err, result) {
        if (err) {
            console.log(err);
            res.json({'status': 'err', 'info': '数据获取失败!'});
        } else {
            console.log(result);
            res.json({'status': 'ok', 'info': result});
        }
    });
});

console.log输出的结果:

[ { _id: 57f79e5e310aea056fe30710,
    goodId: '57f70900ebb75c03805d0015',
    username: 'aa',
    content: '盖楼第一层a',
    createTime: Fri Oct 07 2016 21:08:46 GMT+0800 (CST),
    follow: [],
    __v: 0 },
  { _id: 57f79e76310aea056fe30711,
    goodId: '57f70900ebb75c03805d0015',
    username: 'aa',
    content: '盖楼第一层a',
    createTime: Fri Oct 07 2016 21:08:46 GMT+0800 (CST),
    follow: [ [Object], [Object], [Object] ],
    __v: 0 } 

在mongo命令行中查询的结果:

> db.comments.find().toArray();
[
	{
		"_id" : ObjectId("57f79e5e310aea056fe30710"),
		"goodId" : "57f70900ebb75c03805d0015",
		"username" : "aa",
		"content" : "盖楼第一层a",
		"createTime" : ISODate("2016-10-07T13:08:46.562Z"),
		"follow" : [ ],
		"__v" : 0
	},
	{
		"_id" : ObjectId("57f79e76310aea056fe30711"),
		"goodId" : "57f70900ebb75c03805d0015",
		"username" : "aa",
		"content" : "盖楼第一层a",
		"createTime" : ISODate("2016-10-07T13:08:46.562Z"),
		"follow" : [
			{
				"createTime" : ISODate("2016-10-07T13:09:10.238Z"),
				"content" : "盖楼第二层bb",
				"username" : "bb"
			},
			{
				"createTime" : ISODate("2016-10-07T13:09:10.238Z"),
				"content" : "盖楼第二层bb",
				"username" : "bb"
			},
			{
				"createTime" : ISODate("2016-10-07T13:09:10.238Z"),
				"content" : "盖楼第二层bb",
				"username" : "bb"
			}
		],
		"__v" : 0
	}
]

数据插入操作都是没有问题的。现在获取到的result ( follow: [ [Object], [Object], [Object] ],) 传到客户端后,follow输出值完全就是空的。 求指导,怎么才能获取到follow的值?

7 回复

这是因为Object的toString返回的就是这个 你可以转成一个字符串就可以了 比如Json From Noder

console.dir(data, {depth: null})

@yeliex 我找到自己的问题所在了。 我返回的result是一个数组,而我用result.follow 这种方式获取(我真是太逗逼了,应该是result[x].follow),所以我总是获取不到值。仔细看了下,服务端console的数据是对的,但浏览器console 显示数组follow中第一个元素会被丢掉,费解。目前处理方式就是把follow转为字符串了。 感谢解答。

@Neil-UWA get一项新技能,感谢!

JSON.stringify(obj)

@hwoarangzk 感谢。我自己已经解决了。用了stringify 这个知识点

stringify是序列化成字符串了,自然没有问题,只不过格式就不是JSON了。console.log打印是有depth限制的,你可以使用util.inspect并结合depth属性打印。console.dir也是很流弊的

回到顶部