跳到主要内容
CNode

三个郁闷的错误……搞了一下午……

社区
Ccodelint发布于 15 年前最后回复 15 年前
454430

  • 在nodejs下开发,发送http请求,一直没有response(回调一直没有触发……)

    • nodejs文档中的例子,在回调中调用req.end()。这是错误的,必须在发送请求的代码段中调用,var req =http.request(opts, callback)。而不是在callback里调用……

    • 错误示例, var req = http.request(opts, function(res){...; req.end();})

    • 修正示例, var req = http.request(opts, function(res){...;}; req.end();



  • javascript 循环中回调函数闭包引发的杯具

    • for(var i = array.length; i--;) setTimeout(function(){console.log(array[i])}, 100);

    • 输出全部为:undefined

    • 解决:
      function bugFix(unit){setTimeout(function(){console.log(unit)}, 100)}
      for(var i = array.length; i--;) bugFix(array[i]);



  • express编写rest服务,server已经使用server.use(express.bodyParser()),但请求中仍没有解释body。

    • 客户端发送的请求中,headers里加入"content-type":"application/json"。那么express就会自动解析json,req.body就会有东西……

    • 由于测试用例里,缺少这个,所以,req.body一直undefined...



查看回复

回复 (4)

C
codelint#415 年前

呵呵,我错了两次,才想着把它写下来……
javascript的作用域,是函数级的

A
anonymous#315 年前

我误解了js的变量作用域,花括号无法形成一个作用域,所以循环内定义的变量依旧是全局的

A
anonymous#215 年前

对不起,我没经过验证就下了结论,我的方法是错误的
哪位来解答一下

A
anonymous#115 年前

第二个不用重新定义一个函数,这样就可以了
for(var i = array.length; i–;) {
var val = array[i];
setTimeout(function(){console.log(val)}, 100);
}

参与回复

登录后即可参与回复。登录