繁体   English   中英

NodeJS HTTP请求处理程序

[英]NodeJS http request handler

在我的项目中,我正在使用2种异步方法。 第一种方法打开一个Applescript,它打开一个After Effects项目并加载jsx文件(以调整After Effects项目中的项目)。 第二种方法呈现调整后的After Effects项目并将其呈现为.mp4文件。

第一种方法的问题在于它可以很好地打开After Effects,但是只能打开一个After Effects实例,因为After Effects一次只能打开1个After Effects项目。

如果对代码有多个HTTP请求,则After Effects将引发错误。 因为它必须同时打开多个After Effects项目,所以不允许这样做。

我正在寻找一种排队此方法的HTTP请求的方法,以便可以将After Effects一次打开,并在几秒钟后执行第二个请求,并且After Effects将一次又一次打开。有没有办法在NodeJS中做到这一点? 因为我的代码无法做到这一点,所以我无法在net / stackoverflow上找到解决方案。

exports.renderProject = function (req, res) {

async.series([
        function (callback) {
            callback();
        },
        function (callback) {

            var template = req.body[0].template; //project to render (.aep file)

            //OSX editproject
            var editProject = executablepathOSX + " " + template + " " + template + ".jsx" + " " + guid /*retValVacancyList[0].animation.template*/

            var sys = require('sys');
            var exec = require('child_process').exec;
            var child;

            // executes 'edit project'
            child = exec(editProject, function (error, stdout, stderr) {
                sys.print('stdout: ' + stdout);
                sys.print('stderr: ' + stderr);
                if (error !== null) {
                    console.log('exec error: ' + error);
                }
                callback();
            });

        },
        function (callback) {

            var renderProject = shellscript + "renderMp4.sh " + guid + ".aep " + guid + ".mp4"//guid + ".avi" //animation.template .avi name(guid)

            var sys = require('sys');
            var exec = require('child_process').exec;
            var child;

            // executes 'render project'
            child = exec(renderProject, function (error, stdout, stderr) {
                sys.print('stdout: ' + stdout);
                sys.print('stderr: ' + stderr);
                if (error !== null) {
                    console.log('exec error: ' + error);
                }
                callback();
            });
       }

您可以使用async.queue

var exec = require('child_process').exec;

var aequeue = async.queue(function(template, callback) {
  var editProject = executablepathOSX + ' ' + template + ' ' + template + '.jsx' + ' ' + guid /*retValVacancyList[0].animation.template*/

  // executes 'edit project'
  exec(editProject, function(error, stdout, stderr) {
    callback(error);
  });
}, 1);

async.series([
  function (callback) {
      callback();
  },
  function (callback) {
    aequeue.push(req.body[0].template, callback);
  },
  function (callback) {
    var renderProject = shellscript + "renderMp4.sh " + guid + ".aep " + guid + ".mp4"//guid + ".avi" //animation.template .avi name(guid)

    // executes 'render project'
    exec(renderProject, function(error, stdout, stderr) {
      callback(error);
    });
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM