《Nodejs入门》一书确实很好的入门工具书,不过其中的一些代码还是和我们的实际开发环境不同。比如该书中的最后一个例子,上传图片到服务器。
其中存在的问题的一部分源代码如下(处理上传文件):
Js代码
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();
});
}
这里用到了formidable第三方模块,上面的代码总是报错“can not find File or Directory: c:\......”; 原因是formidable默认上传文件的保存路径与项目路径不在同一相同路径中。如我的工程是在e盘。所以需要设置form.uploadDir = "tmp";//指向工程中的tmp文件夹
另外,fs.renameSync()保存文件会抛出异常,为了能让程序正常运行,这里需要添加try{}catch(e){}
如果我们像上传图片的同时,想在前台的一个输入框内设置一下名称,后台通过formidable如何获取这个字段的值呢?
Js代码
...
form.parse(req, function(error, fields, files){
//filename为<input>标签中name属相的值
var filename = fields["filename"];
...
});
…
综上所述下面是upload方法完整的代码:
Js代码
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();
});
}
我也看了,照着示例敲代码,看到那个以非阻塞方式来访问页面的时候,怎么一直都是阻塞的,页面一直加载,根本进不去。 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;
不知道怎么回事
@aaroncanter 多谢多谢。 恩 搞的差不多了,但还是没有弄出来,可能是我项目没有建好吧 反正debug后project Explorer 里node-5858都出来了,也打了断点但是就是进不去。