【发布时间】:2016-05-08 22:04:49
【问题描述】:
我是 node.js 的新手。 我知道这似乎是一个重复的问题,但我查看了许多相关主题并尝试了很多,但这太复杂了......
我在服务器端使用 Node.js 上传文件并重命名。文件的新名称来自表单中某个隐藏字段的客户端。 问题是新名称出现在一个异步函数中,而文件写在另一个函数中,因此当我将文件写入流时该名称不可用。
我尝试将第二个调用嵌套在第一个回调函数中,但它不再触发。 我也尝试了 async.waterfall,但没有成功。
这是服务器端代码:
//--------------------------initializing:--------------------------
var express = require('express');
var busboy = require('connect-busboy');
var path = require('path');
var fs = require('fs-extra');
var bodyParser = require('body-parser');
var formidable = require('formidable');
var urlencodedParser = bodyParser.urlencoded({ extended: true })
var app = express();
app.use(bodyParser());
app.use(busboy());
app.use(express.static(__dirname ));
app.get('/', function(req, res,next) {
res.sendFile(__dirname + '/a.html');
});
var server = app.listen(SERVER_PORT, function() {
console.log('Listening on port %d', server.address().port);
});
//------------------Here is the main code : ----------------------
//UPLOAD is not logged.
app.post('/upload', function(req, res){
var form = new formidable.IncomingForm();
var fstream;
req.pipe(req.busboy);
var newName ;
form.parse(req, function(err, fields, files) {
newName = fields.hiddenField;
console.log('PARSE');
req.busboy.on('file', function (fieldname, file, filename) {
console.log('UPLOAD');
fstream = fs.createWriteStream(__dirname + '/img/' + newName + '.jpg');
file.pipe(fstream);
fstream.on('close', function () {
res.redirect('back');
}); //where to go next
});
});
});
感谢您的帮助。
【问题讨论】:
-
你能发布所有的服务器端代码吗?有些部分似乎丢失了。
-
我刚刚删除了 'require' 语句。他们是: var express = require('express'); var busboy = require('connect-busboy'); var path = require('path'); var fs = require('fs-extra'); var bodyParser = require('body-parser'); var formidable = require('formidable'); var urlencodedParser = bodyParser.urlencoded({extended: true })
标签: javascript node.js express asynchronous