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

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

内容简介:翻译自: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


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

查看所有标签

猜你喜欢:

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

人本界面

人本界面

(美)拉斯基(Jef Raskin) / 史元春 / 机械工业出版社 / 2004-1-1 / 28.0

如果我们想克服目前人机界面上的固有缺陷,就很有必要理解本书的教义;若无此愿望,读读也无妨。交互设计的许多重要方面此书并没有包括在内,因为许多文献中都已经有详尽的阐述。本书的意图是补充现有的界面设计的方法或预测未来。  本书概述了人机界面设计领域的研究成果,详细论证了界面设计思想应以认知学为基础,并考虑人类的心智特点,在指出当前界面设计中弊端的同时,提出了新产品开发的思路。本书集计算机科学、人体工程......一起来看看 《人本界面》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具