node.js – ResponseError:预期4或0字节int

栏目: Node.js · 发布时间: 6年前

内容简介:翻译自:https://stackoverflow.com/questions/26682873/responseerror-expected-4-or-0-byte-int

我正在尝试cassandra节点驱动程序并在插入记录时陷入问题,它看起来像cassandra驱动程序无法插入浮点值.

Problem: When passing int value for insertion in db, api gives following error:
    Debug: hapi, internal, implementation, error 
        ResponseError: Expected 4 or 0 byte int (8)
        at FrameReader.readError (/home/gaurav/Gaurav-Drive/code/nodejsWorkspace/cassandraTest/node_modules/cassandra-driver/lib/readers.js:291:13)
        at Parser.parseError (/home/gaurav/Gaurav-Drive/code/nodejsWorkspace/cassandraTest/node_modules/cassandra-driver/lib/streams.js:185:45)
        at Parser.parseBody (/home/gaurav/Gaurav-Drive/code/nodejsWorkspace/cassandraTest/node_modules/cassandra-driver/lib/streams.js:167:19)
        at Parser._transform (/home/gaurav/Gaurav-Drive/code/nodejsWorkspace/cassandraTest/node_modules/cassandra-driver/lib/streams.js:101:10)
        at Parser.Transform._read (_stream_transform.js:179:10)
        at Parser.Transform._write (_stream_transform.js:167:12)
        at doWrite (_stream_writable.js:225:10)
        at writeOrBuffer (_stream_writable.js:215:5)
        at Parser.Writable.write (_stream_writable.js:182:11)
        at write (_stream_readable.js:601:24)

我试图从代码执行以下查询:

INSERT INTO ragchews.user
(uid ,iid ,jid ,jpass ,rateCount ,numOfratedUser ,hndl ,interests ,locX ,locY ,city )
VALUES
('uid_1',{'iid1'},'jid_1','pass_1',25, 10, {'NEX1231'}, {'MUSIC'}, 21.321, 43.235, 'delhi');

传递给execute()的参数是

var params = [uid, iid, jid, jpass, rateCount, numOfratedUser, hndl, interest, locx, locy, city];

哪里

var locx = 32.09;
var locy = 54.90;

并调用执行看起来像:

var addUserQuery = 'INSERT INTO ragchews.user (uid ,iid ,jid ,jpass ,rateCount ,numOfratedUser ,hndl ,interests ,locX ,locY ,city) VALUES (?,?,?,?,?,?,?,?,?,?,?);';
var addUser = function(user, cb){
    console.log(user);
    client.execute(addUserQuery, user, function(err, result){
        if(err){
            throw err;
        }
        cb(result);
    });
};

CREATE TABLE ragchews.user( 
    uid varchar,    
    iid set<varchar>,   
    jid varchar,    
    jpass varchar,  
    rateCount int,  
    numOfratedUser int, 
    hndl set<varchar>,  
    interests set<varchar>, 
    locX float, 
    locY float, 
    city varchar,   
    favorite map<varchar, varchar>, 
    PRIMARY KEY(uid)
);

P.S

在尝试理解问题时的一些观察:

>因为看起来问题是浮点数所以我将类型float(locX,locY)更改为int并重新运行代码.同样的错误仍然存​​在.因此,它不是浮动CQL类型特别相关的问题.

>接下来,我尝试从INSERT查询中删除所有int,并尝试仅插入非数字值.此尝试成功将值输入db.因此,现在看来,这个问题可能与数字类型有关.

以下单词是从 cassandra node driver data type documentation

中选取的

在对数据进行编码时,在使用参数的正常执行时,驱动程序会尝试根据输入类型猜测目标类型. Number类型的值将被编码为double(因为Number是double / IEEE 754值).

请考虑以下示例:

var key = 1000;
client.execute('SELECT * FROM table1 where key = ?', [key], callback);

如果键列的类型为int,则执行失败.有两种方法可以避免此类问题:

>准备数据(推荐) – 在执行前准备查询

client.execute(‘SELECT * FROM table1 where key =?’,[key],{prepare:true},callback);

>提示目标类型 – 提示:第一个参数是整数

client.execute(‘SELECT * FROM table1 where key =?’,[key],{hints:[‘int’]},callback);

如果您正在处理批量更新,那么 this issue 可能是您感兴趣的.

翻译自:https://stackoverflow.com/questions/26682873/responseerror-expected-4-or-0-byte-int


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Cracking the Coding Interview

Cracking the Coding Interview

Gayle Laakmann McDowell / CareerCup / 2015-7-1 / USD 39.95

Cracking the Coding Interview, 6th Edition is here to help you through this process, teaching you what you need to know and enabling you to perform at your very best. I've coached and interviewed hund......一起来看看 《Cracking the Coding Interview》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

URL 编码/解码
URL 编码/解码

URL 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试