【发布时间】:2016-08-10 23:25:56
【问题描述】:
我是Web服务的菜鸟,对node js的了解不是很深,所以如果问题不正确,我提前道歉。 我的问题是我的 angular-node js 应用程序中有两个功能。 第一个功能,上传文件到服务器上的公共文件夹
var storage = multer.diskStorage({ //multers disk storage settings
destination: function (req, file, cb) {
cb(null, './demo/');
},
filename: function (req, file, cb) {
//var datetimestamp = Date.now();
cb(null, file.originalname
//file.fieldname + '-' + datetimestamp + '.' + file.originalname.split('.')[file.originalname.split('.').length -1]
);
}
});
var upload = multer({ //multer settings
storage: storage
}).single('file');
/** API path that will upload the files */
app.post('/upload', function(req, res) {
upload(req,res,function(err){
if(err){
res.json({error_code:1,err_desc:err});
return;
}
res.json({error_code:0,err_desc:null});
});
});
第二个功能,调用执行java app
var child = function() {
spawn('java', ['-Xms64M', '-Xms64M', '-jar', '/home/ubuntu/code/ParseExcel.jar',
'/var/www/html/demo/test.xls']);
child.on('close', function (exitCode) {
if (exitCode !== 0) {
console.error('Something went wrong!');
}
});
child.stderr.on('data', function (data) {
process.stderr.write(data);
});
}
节点js中是否有类似angular $watch的东西,我可以在文件上传功能上设置它,所以如果文件已经成功上传,请调用java函数
@Paul 提供的解决方案(已修改)
app.post('/upload', function(req, res) {
upload(req,res,function(err){
if(err){
res.json({error_code:1,err_desc:err});
return;
}
// first, call your child code:
var child = spawn('java', ['-Xms64M', '-Xms64M', '-jar', '/home/ubuntu/code/ParseExcel.jar',
'/var/www/html/demo/test.xls']);
child.on('close', function (exitCode) {
if (exitCode !== 0) {
console.error('Something went wrong!');
}
});
child.stderr.on('data', function (data) {
process.stderr.write(data);
});
// In my case java app parsing xls to json around 5-8 sec, that's why I'm using timeout
setTimeout(10000);
// then respond to the client so it's not waiting:
res.json({error_code:0,err_desc:null});
});
//return req.child;
});
【问题讨论】:
-
这就是上传中间件中的回调正在做的事情。
res.json({error_code:0, err_desc:null});是成功的文件上传处理程序。 -
@Paul 所以
res.json({error_code:0, err_desc:null});我必须调用函数''child",类似于res.child? -
我会写一个答案。
-
@Paul 谢谢你,我很感激
标签: javascript angularjs node.js