<p>《Nodejs入门》一书确实很好的入门工具书,不过其中的一些代码还是和我们的实际开发环境不同。比如该书中的最后一个例子,上传图片到服务器。</p>
<p>其中存在的问题的一部分源代码如下(处理上传文件):</p>
<p>Js代码 </p>
<pre><code>function upload( res, req){
console.log(“request upload mehtod”);
var form = new formidable.IncomingForm();
form.parse( req, function( error, fields, files){
fs.renameSync(files.upload.path, “tmp/”+filename+".png");
res.writeHead(200,{“Content-Type”:“text/html”});
res.write("<img src=’/show’/>"); //发送/show请求
res.end();
});
}
</code></pre>
<p>这里用到了formidable第三方模块,上面的代码总是报错“can not find File or Directory: c:…”; 原因是formidable默认上传文件的保存路径与项目路径不在同一相同路径中。如我的工程是在e盘。所以需要设置form.uploadDir = “tmp”;//指向工程中的tmp文件夹</p>
<p>另外,fs.renameSync()保存文件会抛出异常,为了能让程序正常运行,这里需要添加try{}catch(e){}</p>
<p>如果我们像上传图片的同时,想在前台的一个输入框内设置一下名称,后台通过formidable如何获取这个字段的值呢?</p>
<p>Js代码 </p>
<pre><code>…
form.parse(req, function(error, fields, files){
//filename为<input>标签中name属相的值
var filename = fields["filename"];
...
});
…
</code></pre>
<p>综上所述下面是upload方法完整的代码:</p>
<p>Js代码 </p>
<pre><code>function upload( res, req){
console.log(“request upload mehtod”);
var form = new formidable.IncomingForm();
form.uploadDir = "tmp";
form.parse( req, function( error, fields, files){
console.log("parsing done");
var filename = fields['filename'];
console.log("filename = " + filename);
try{
fs.renameSync(files.upload.path, "tmp/"+filename+".png");
}catch( e){
console.log(e);
}
res.writeHead(200,{"Content-Type":"text/html"});
res.write("<img src='/show'/>"); //发送/show请求
res.end();
});
}
</code></pre>
顶,昨天试验的时候刚好遇到这个问题,还在郁闷哪里的问题,就看到楼主的解答!谢谢楼主
彼此彼此,共同学习~
已经跟进了。还跟进了《nodejs入门》中提到的nodejs不支持缓存,使用eclipse插件来查看数据传递的问题。
我也看了,照着示例敲代码,看到那个以非阻塞方式来访问页面的时候,怎么一直都是阻塞的,页面一直加载,根本进不去。 var exec = require(“child_process”).exec;
function start() { console.log(“Request handler ‘start’ was called.”); var content = “empty”;
exec(“ls -lah”, function (error, stdout, stderr) { content = stdout; });
return content; }
function upload() { console.log(“Request handler ‘upload’ was called.”); return “Hello Upload”; }
exports.start = start; exports.upload = upload;
不知道怎么回事
顺便问下 楼主,我安装eclipse的node调试插件后,如何配合debug的config,我的一直报错,我发表过一篇文章,不知道您是如何解决的?
自己回答下,因为我用的是window下安装node,没有源码和类库,所以导致这个问题…我试了下cygwin下 是wonderful。。。哈哈
不好意思。这几天一直有事。问题解决了 吗?这个是我iteye上的写的,你可以看一下。 http://baiyejianxin.iteye.com/admin/blogs/1401775
我当时遇到一个问题,是安装了迅雷的游戏加速器。导致LSP被修改了。导致无法访问。一直等待状态。你看看是不是也是类似的问题。至于书里面写的那段例子我测试是没有问题的。我在windows下就OK。
@aaroncanter 多谢多谢。 恩 搞的差不多了,但还是没有弄出来,可能是我项目没有建好吧 反正debug后project Explorer 里node-5858都出来了,也打了断点但是就是进不去。
我觉得不是你代码的问题。我猜测是网络的问题。你用360安全卫士中–功能大全–修复网络(LSP)修复一下事实。我当初遇到的问题也是发送请求之后一直不执行代码段。修复了一下网络,一切正常了。
@zhengpan 恩,这个问题我苦恼了一天了
看到帖子都是2012年的…
So…what?