Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js OrientJS:将二进制数据存储在“;“正常”;属性_Node.js_Blob_Marshalling_Orientdb_Orientjs - Fatal编程技术网

Node.js OrientJS:将二进制数据存储在“;“正常”;属性

Node.js OrientJS:将二进制数据存储在“;“正常”;属性,node.js,blob,marshalling,orientdb,orientjs,Node.js,Blob,Marshalling,Orientdb,Orientjs,我想使用OrientDB作为.csv文件的数据库,并使用OrientJS将这些文件以原始形式存储在记录的二进制字段中。此外,我希望将名称和描述存储为字符串。我仔细阅读了文档,能够通过 var fs = require('fs'); var testcsv = fs.readFile('test.csv', function(error, data){ if(error) throw error; var binary = new Buffer(data); bina

我想使用OrientDB作为.csv文件的数据库,并使用OrientJS将这些文件以原始形式存储在记录的二进制字段中。此外,我希望将名称和描述存储为字符串。我仔细阅读了文档,能够通过

 var fs = require('fs');
 var testcsv = fs.readFile('test.csv',
 function(error, data){
    if(error) throw error;
    var binary = new Buffer(data);
    binary['@type'] = 'b';
    binary['@class']='CSV';
    db.record.create(binary);
})
但是,我找不到方法来存储具有“Binary”类型字段的记录。 我尝试了几种方法,但似乎都不管用。例如:

     var fs = require('fs');
     var testcsv = fs.readFile('test.csv',
     function(error, data){
        if(error) throw error;
        var binary = new Buffer(data);
        binary['@type'] = 'b';
        binary['@class']='CSV'; 
        db.record.create({
           '@class': 'Test',
           'file': binary,
           'name': 'X',
           'description': 'Y'
        });
     })
如果'field'未声明为'Binary',则默认情况下将其设置为'Embedded'类型,并且.csv被“存储”。 如果“字段”声明为“二进制”,则会引发错误:

Unhandled rejection OrientDB.RequestError: Error on unmarshalling field 'file' in record #22:-1 with value: file: ... 
DB name="mydb"
    at child.Operation.parseError (...node_modules\orientjs\lib\transport\binary\protocol33\operation.js:864:13)
    at child.Operation.consume (...node_modules\orientjs\lib\transport\binary\protocol33\operation.js:455:35)
    at Connection.process (...node_modules\orientjs\lib\transport\binary\connection.js:399:17)
    at Connection.handleSocketData (...node_modules\orientjs\lib\transport\binary\connection.js:290:20)
    at emitOne (events.js:96:13)
    at Socket.emit (events.js:188:7)
    at readableAddChunk (_stream_readable.js:176:18)
    at Socket.Readable.push (_stream_readable.js:134:10)
    at TCP.onread (net.js:548:20)
当我尝试了许多其他的方法时,我变得不知所措。我是不是误解了什么?
非常感谢您的帮助

这里有一个变通方法,二进制文件被编码为
base64
,然后存储为字符串属性

下面是一个示例,我对
svg
文件进行编码,然后在从数据库加载后再次对其进行解码:

//第一个npm安装以下软件包
npm安装定向JS
npm安装等待js
然后创建一个文件
app.js
,并运行它:

const OrientDBClient=require(“orientjs”).OrientDBClient;
const to=require('await-to-js')。默认值;
//示例文件:SVG图像
var svg=`
`
connect().then(异步函数(db){
//将类添加到数据库
[错误,结果]=等待(
db.session.class.create('Example','V')
);
if(err){console.error(err);};
//将属性映像添加到类
[错误,结果]=等待(
db.session.command('CREATE PROPERTY Example.image STRING').all()
);
if(err){console.error(err);};
//将属性名称添加到类
[错误,结果]=等待(
db.session.command('CREATE PROPERTY Example.name STRING').all()
);
if(err){console.error(err);};
// *****************************************************************
//*************************使用BASE64编码*********************
// *****************************************************************
//转换为base64
var buf=Buffer.from(svg,'utf-8').toString(“base64”);
//将节点添加到图像编码为base64的类
[错误,结果]=等待(
db.session.insert().into('Example').set({image:buf,name:'ABC'}).one()
);
if(err){console.error(err);};
//从数据库检索base64编码的svg
[错误,结果]=等待(
session.select('image')。from('Example')。其中({name:'ABC'})。one()
);
if(err){console.error(err);};
//将svg XML输出到控制台
var输出=Buffer.from(result.image,'base64');
console.log(output.toString('ascii');
})
异步函数connect(){
//连接到服务器
[err,client]=等待(OrientDBClient.connect)({
主机:'localhost',//在此处指定您的主机
端口:“2424”//确保调用HTTP端口
}));
如果(错误){
log(“无法访问OrientDB。服务器处于脱机状态”);
返回false;
}
//连接到数据库。
[err,session]=等待(client.session({
名称:'解调器',//数据库的名称
用户名:“admin”,//数据库的用户名
密码:“admin”//数据库的密码
}));
如果(错误){
log(“数据库不存在”);
返回false;
}
//添加处理程序
session.on('beginQuery',(obj)=>{
控制台日志(obj);
});
//检查会话是否打开
log(“已成功连接到数据库”);
变量图={client,session};
返回图;
}
此代码将创建一个类
Example
,该类具有属性
image
name
,然后将创建一个顶点,其中
svg
保存为
base64
编码字符串。它还显示了如何将图像再次检索到javascript中