2013-06-19 2 views
0

Я использую сфинкса для запуска следующего набора запросов с помощью nodejs: -Float == Количество Assertion ошибка при использовании сфинкса с nodejs

sphClient.SetGeoAnchor("latitude", "longitude", lat, long); 
sphClient.SetFilterRange("@geodist",0,1000); 
var res = sphClient.Query("@country country_name"); 

Однако, когда я запускаю это дает мне следующую ошибку: -

throw new assert.AssertionError({ 
    ^
AssertionError: "number" == "float" 
at SphinxClient.SetGeoAnchor (/node_modules/sphinxapi/lib/sphinxapi.js:395:9) 
at Socket.<anonymous> (/node_modules/posts/egx.js:331:15) 
at Socket.EventEmitter.emit [as $emit] (events.js:95:17) 
at SocketNamespace.handlePacket (/node_modules/socket.io/lib/namespace.js:335:22) 
at Manager.onClientMessage (/node_modules/socket.io/lib/manager.js:488:38) 
at WebSocket.Transport.onMessage (/node_modules/socket.io/lib/transport.js:387:20) 
at Parser.<anonymous> (/node_modules/socket.io/lib/transports/websocket/hybi-16.js:39:10) 
at Parser.EventEmitter.emit (events.js:95:17) 
at finish (/node_modules/socket.io/lib/transports/websocket/hybi-16.js:288:16) 
at Parser.expectHandler (/node_modules/socket.io/lib/transports/websocket/hybi-16.js:299:15) 

Я даже понимаю, в чем проблема, после просмотра sphinxapi.js, я узнал, что он сравнивает TYPEOF (лат), TypeOf (длинный) с «поплавком», однако nodejs возвращает только «номер». Я пробовал parseFloat. Также изменения сравнения с «номером» дает мне другую ошибку, как: -

/node_modules/sphinxapi/lib/sphinxapi.js:79 
     l += Number(obj.hasOwnProperty(k)); 
        ^
ReferenceError: obj is not defined 
at len (/node_modules/sphinxapi/lib/sphinxapi.js:79:17) 
at SphinxClient.AddQuery (/node_modules/sphinxapi/lib/sphinxapi.js:572:6) 
at SphinxClient.Query (/node_modules/sphinxapi/lib/sphinxapi.js:476:7) 
at Socket.<anonymous> (/node_modules/posts/egx.js:333:25) 
at Socket.EventEmitter.emit [as $emit] (events.js:95:17) 
at SocketNamespace.handlePacket (/node_modules/socket.io/lib/namespace.js:335:22) 
at Manager.onClientMessage (/node_modules/socket.io/lib/manager.js:488:38) 
at WebSocket.Transport.onMessage (/node_modules/socket.io/lib/transport.js:387:20) 
at Parser.<anonymous> (/node_modules/socket.io/lib/transports/websocket/hybi-16.js:39:10) 
at Parser.EventEmitter.emit (events.js:95:17) 
+0

Когда sphinxapi.js был перенесен с другого языка, кодер, вероятно, забыл изменить утверждения, чтобы учетная запись JS не имела прямого типа «float». Просто измените строку assert. – barryhunter

ответ

0

Javascript имеет только один тип чисел, который является «двойной». нет числа, поплавки и т.д. независимо от того, какой тип номера вы проверяете, вы всегда получите «номер» в результате:

TypeOf 1 является «номер»

TypeOf 1.1 «Номер»

Я не знаю, что происходит внутри sphinx typeof(), но это нормально, что все «число». , пожалуйста, напишите код или ссылку, где я могу найти код. это поможет мне помочь вам пройти через это.

+0

Из того, что я вижу, это https://github.com/touv/node-sphinxapi/blob/master/lib/sphinxapi.js, по-видимому, является канонической версией sphinxapi.js. Строка 79 уже отличается, поэтому, возможно, «obj не определен» уже исправлен. На самом деле 395/6 уже составляют число, не плавающее. – barryhunter

+2

Ах! https://github.com/touv/node-sphinxapi/commit/3389b3e235e40f995fdef67a7d41397ab5dcb18d И https://github.com/touv/node-sphinxapi/commit/adf486addaadf6236223fb3bd6db157c59c8481d Так AnuragD вы должны просто загрузить последнюю версию sphinxapi.js – barryhunter

+0

да, я исправил все вышеперечисленное, теперь я сравниваю его с номером, и я также позаботился об объекте. Сейчас ошибок нет, но я до сих пор не получаю никаких результатов. – AnuragD

Смежные вопросы