NodeJS exec mkdir不工作

时间:2016-07-26 14:51:04

标签: javascript node.js cmd mkdir

以下代码在c:/api/iaas中生成 Vagrantfile ,而不是使用mkdir创建新文件,然后将 Vagrantfile 添加到该文件夹​​。< / p>

mkdir部分应创建文件夹,但不会创建它。如何修复它以便创建文件夹然后将 Vagrantfile 添加到它?

  

所需:c:/api/iaas/ubuntu/Vagrantfile

     

现在发生了什么:c:/api/iaas/Vagrantfile

代码:

exec(function (err, boxes) {
  if (err) return next(err);

  exec('mkdir ' + box.boxos, {
      cwd: 'c:/api/iaas/'
  }, function (error, stdout, stderr) {
      // work with result
  });

  exec('vagrant init ' + box.boxos + '/' + box.boxversion, {
      cwd: 'c:/api/iaas/' + box.boxos + '/'
  }, function (error, stdout, stderr) {
      // work with result
  });

  res.redirect('/profile/');
});

3 个答案:

答案 0 :(得分:0)

由于两个步骤都是相关的,因此需要顺序地执行这两个步骤。 使用fs.mkdirSync创建目录,然后继续使用相关逻辑。

https://nodejs.org/api/fs.html

另一种选择是在fs.mkdir

的回调中处理后续的依赖逻辑

答案 1 :(得分:-1)

var user_id = req.user.id;

var fs = require('fs');

fs.mkdir('c:/api/iaas/' + box.boxos, function (err) {
    if(err) {
        console.log('error in mkdir: ' + err);
    } else {
        Box.
        find({
            user_id: user_id
        }).
        sort('-updated_at').
        exec(function (err, boxes) {
            if (err) return next(err);

            var exec = require('child_process').exec;
            exec('vagrant init ' + box.boxos + '/' + box.boxversion, {
                cwd: 'c:/api/iaas/' + box.boxos
            }, function (error, stdout, stderr) {
                // work with result
            });

            res.redirect('/profile/');
        });
    }
});

你应该看看有关异步编程的书籍。

答案 2 :(得分:-1)

简单的解决方案是nmp install mkdirp

app.get('/addbox/:id', isLoggedIn, function (req, res) {
        Box.findById(req.params.id, function (err, box) {
            console.log('addbox clicked');

            var user_id = req.user.id;

            //            var mkdirp = require('mkdirp');
            //            mkdirp('c:/api/iaas/' + box.boxos, function (err) {});

            Box.
            find({
                user_id: user_id
            }).
            sort('-updated_at').
            exec(function (err, boxes) {
                if (err) return next(err);

                var box_path = 'c:/api/iaas/' + req.user.local.username + '/' + box.boxos + '/' + box.boxversion + '/' + box.id + '/'

                new Instance({
                    user_id: req.user.id,
                    box_id: box.id,
                    box_path: box_path,
//                    ssh: req.body.ssh,
                    ssh: "ssh-",
                    username: req.user.local.username,
                    password: req.user.local.password
                }).save(function (err, instance, count) {
                    if (err) return next(err);



                    mkdirp(box_path, function (err) {
                        var exec = require('child_process').exec;
                        exec('vagrant init ' + box.boxos + '/' + box.boxversion, {
                            cwd: box_path
                        }, function (error, stdout, stderr) {
                            // work with result
                        });

                        res.redirect('/profile/');
                    });


                });
            });
        });
    });