2017-08-24 55 views
0

我有一个关于缓冲区类型的问题。我是NodeJ中的新成员,我需要帮助才能了解缓冲区类型如何工作。让我们来举例:NodeJS类型缓冲区不一致性

我在架构“用户”有场“图片”。

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..." 
} 

详细信息:我用快速使用猫鼬。

回答

0

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

但是当你使用u.picture节点试图通过调用u.picture.toString()导致你所看到的表示以缓冲区转换为字符串。

+0

感谢@AlexandruOlaru为干净的答案。但是我怎么能同时拥有两个? 我想的名字和picture.toString()在相同的反应 –

+0

@brunnogrillo更新我的回答 –

+0

遗憾的是它不工作。我甚至试过这样:u.picture =新的缓冲区(u.picture“的base64”)的toString(“二进制”)没有成功 –

相关问题