首先,教程确实以错误的顺序传递请求和响应。我做的第一件事是将订单从(response, request) 更改为(request, response)。 (确保在任何地方都这样做)。这样做的原因是因为我很确定HTTP 的createServer() 中的onRequest 函数按此顺序传递它们。
一旦我这样做了,我仍然遇到同样的错误。但是通过记录来自我的表单的信息
...
var form = new formidable.IncomingForm();
console.log("About to parse...");
form.parse(request, function(error, fields, files) {
console.log("Parsing done.");
console.dir(request.headers);
console.log(fields);
console.log(files);
...
我注意到fields 键包含我要查找的内容,而files 键是空的。
{ upload: '2015-03-08 14.54.06.jpg', 'Upload File': 'Submit' }
{}
从这里很明显我可以使用fields.upload。使用这个返回另一个错误,它不是一个字符串(或者至少不是一个强大的会接受的)。 toString() 似乎也不起作用,所以我使用了备用转换:
fs.rename(fields.upload + "", "img/img.jpg", function(error) {
...
}
这并不理想,但它成功了。
这是通过 node@0.10.35 和 formidable@1.0.17 完成的。我不知道我的解决方案是否适用于所有人,但希望它可以为你们中的一些人指明正确的方向。差异可能是由于他在教程中使用了旧版本的 node 和强大的事实。