NodeJS类型缓冲区不一致

时间:2017-08-24 13:14:32

标签: node.js image express mongoose buffer

我对缓冲类型有疑问。我是NodeJ的新手,我需要帮助才能理解Buffer Type的工作原理。让我们举例:

我的架构“用户”中有一个字段“图片”。

var UserSchema = new mongoose.Schema({
  name: String,
  picture: { type: Buffer, contentType: String}
});

另外,我有一个端点来获取信息。这很简单:

User.findById(req.params.id, function (err, u) {            
  res.send(u);
});

此时没有问题。 但我面对的是这种反应不一致。

案例01(res.send(u)):     当我在我的回复中包含所有文档时,Buffer字段就是这样的:

{ 
  "name": "aaa", 
  "picture": {
            "type": "Buffer",
            "data": [100,97,116,97,58,105,...]
  }
}

案例02(res.send(u.picture)): 当我只有图片字段时,我的回答是这样的:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAMAAAC5zwKfAAADAFBMVEUODAkjCgYbGBQTJwZFEBIuHBZjDw8ZLkUyKCNFJRonOA1cIglNLBYgN1QiQCSDExlWJi+pAw4+NDJrICxkKg8zRBNKOCFbMSo1RDrEAxRvLxFVOiNnMh6ZGCEpRWo8TB5fPRF1MhOELQpMQEBBUA1BQVxfOjJ6KUpZQighV088TEF6NhdYQT1qPCvDFCFFVSO1GyhLTzeKK06COhkrWGdEU0hZSkYhY1pBT3NuShdiSEGaLjh8QCxBWz0XaWYRX61wSDAwbRxNXCzrDCpVVzZBYy6LQR62KDFqR1ufOxBTV0hiT0tySj9LXFFbVFc3XYyZNV1IWYBXZxKFSjZpVk3FLDiWSSR7VjFmWlZUajdhYU...

我的问题是:为什么会出现这种情况以及我如何做出如下所示的回复?

{
  "name": "aaa",
  "picture: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAMAAAC5zwKfAAADAFBMVEUODAkjCgYbGBQTJwZFEBIuHBZjDw8ZLkUyKCNFJRonOA1cIglNLBYgN1QiQCSDExlWJi+pAw4+NDJrICxkKg8zRBNKOCFbMSo1RDrEAxRvLxFVOiNnMh6ZGCEpRWo8TB5fPRF1MhOELQpMQEBBUA1BQVxfOjJ6KUpZQighV088TEF6NhdYQT1qPCvDFCFFVSO1GyhLTzeKK06COhkrWGdEU0hZSkYhY1pBT3NuShdiSEGaLjh8QCxBWz0XaWYRX61wSDAwbRxNXCzrDCpVVzZBYy6LQR62KDFqR1ufOxBTV0hiT0tySj9LXFFbVFc3XYyZNV1IWYBXZxKFSjZpVk3FLDiWSSR7VjFmWlZUajdhYU..."
}

详细信息:我正在使用mongoose和express。

1 个答案:

答案 0 :(得分:0)

当您使用整个对象时,您看到的是Buffer对象类型,带有一些二进制数据表示。

但是当您使用u.picture节点时,尝试通过调用u.picture.toString()将缓冲区转换为字符串,从而表示您所看到的内容。