2013-01-24 353 views
0

我一直在摸索周圍這個問題對什麼似乎像周, ,我不能讓這個問題得到解決。NaN的Node.js的回調問題

我花了幾天試圖讓我能夠調用原始.js文件之外的實際功能在哪裏。

我想要在node.js中做的所有事情都是創建一個函數,它能夠在特定參數(如(1-10或1-100))內生成一個隨機數,並將其轉發回控制檯或由用戶指定的變量。

這是當前的代碼,我有:

server.js

var myModule = require("./my_module.js"); 
console.log("your random number is" + myModule.hello(10)); //<-- the 10 represents the TOP number that will generate, if you look in the proceeding file, it adds a 1 to it as required by the code 

my_module.js

function hello(foo) { 
return Math.floor((Math.random()*foo)+1); 
} 

module.exports.hello = hello; 

即強調這是我得到的問題NaN,(不是數字)從控制檯。 我意識到這意味着在翻譯的某個地方,這個數字可能會變成一個字符串,並且不能被mathFloor字符串讀取。

+0

你可以用*(+富)來嘗試轉換爲數值 – mpm

+0

你與節點0.8.18預期提供工作的片段。而且,乘法的行爲會迫使演員從「絃樂」回到「數字」,無論如何。如果你使用'console.log(typeof foo,foo);''hello'',你會得到什麼? –

回答

0

您可以使用jQuery的方法ISNUMERIC以驗證他們是否給你一個數字。 http://api.jquery.com/jQuery.isNumeric/

爲了確保它仍然是一個數字,並且您沒有不經意地將其設置爲字符串,請使用parseInt()或parseFloat()。

function hello(foo) { 
return Math.floor((Math.random()*parseInt(foo))+1); 
} 
+0

謝謝! :) 這實際上工作! 我明白,並且生病請確保我記得在處理這種類型的整數時在我以後的代碼中添加... 我想看看jQuery, 謝謝! –

0

雖然Erik的答案解決了這個問題,但它不會告訴你字符串來自哪裏。您可以使用console.trace讓您的調試生活更輕鬆。

function hello(foo) { 
    var result = Math.floor((Math.random()*parseInt(foo))+1); 
    if (isNaN(result)) { 
     console.trace("result is NaN") 
    } 
    return result; 
} 

> hello("a") 
Trace: NaN 
    at hello (repl:4:9) 
    at repl:1:2 
    at REPLServer.self.eval (repl.js:109:21) 
    at Interface.<anonymous> (repl.js:248:12) 
    at Interface.EventEmitter.emit (events.js:96:17) 
    at Interface._onLine (readline.js:200:10) 
    at Interface._line (readline.js:518:8) 
    at Interface._ttyWrite (readline.js:736:14) 
    at ReadStream.onkeypress (readline.js:97:10) 
    at ReadStream.EventEmitter.emit (events.js:126:20) 
    at emitKey (readline.js:1058:12) 
    at ReadStream.onData (readline.js:807:7) 
NaN 
> 

通過查看堆棧跟蹤,您將能夠找到提供非數字參數的代碼。