【问题标题】:NodeJS Type buffer inconsistencyNodeJS类型缓冲区不一致
【发布时间】:2018-02-02 09:30:51
【问题描述】:

我有一个关于缓冲区类型的问题。我是 NodeJs 的新手,我需要帮助来了解 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)): 当我在回复中包含所有文档时,缓冲区字段是这样的:

{ 
  "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。

【问题讨论】:

    标签: node.js image express mongoose buffer


    【解决方案1】:

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

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

    【讨论】:

    • 感谢@AlexandruOlaru 的干净答案。但我如何同时拥有两者?我希望 name 和 picture.toString() 在同一个响应中
    • 不幸的是它不起作用。我什至试过这个: u.picture = new Buffer(u.picture, 'base64').toString('binary') 没有成功
    • 如果我构建一个新的 Json 就可以工作了:newJson.user = u; newJson.picture = u.picture
    • @brunnogrillo 很高兴为您提供帮助
    • 是的,但这不是我想要的解决方案。因为当我在响应中有很多用户时会发生什么?我必须做一个循环?好像不对
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 2015-07-26
    相关资源
    最近更新 更多