0

我已经在这个问题上摸索了好几个星期,但我无法解决这个问题。

我花了几天时间试图找到可以在原始 .js 文件之外调用实际函数的地方。

我想要做的node.js就是创建一个函数,该函数能够在特定参数(例如(1-10 或 1-100))内生成随机数,并将其传递回控制台或由指定的变量用户。

这是我拥有的当前代码:

服务器.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 字符串读取。

4

2 回答 2

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
>  

通过查看堆栈跟踪,您将能够找到提供非数字参数的代码。

于 2013-01-25T02:43:43.250 回答
0

您可以使用 jQuery 方法 isNumeric 来验证他们是否给了您一个数字。http://api.jquery.com/jQuery.isNumeric/

要确保它仍然是一个数字并且您没有无意中将其设为字符串,请使用 parseInt() 或 parseFloat()。

function hello(foo) {
return Math.floor((Math.random()*parseInt(foo))+1);
}
于 2013-01-24T22:35:07.483 回答