如何在Node.js中将JS脚本文件作为子进程执行

5

我有一个问题,我正在尝试执行使用nodemailer发送邮件的文件,并且我需要从另一个JS文件中执行它。我尝试这样做:

const  exec  = require('child_process').exec;
       exec('"C:/Users/NikitaSeliverstov/node_modules/.bin/send.js"');

但邮件没有发送。我不需要发送参数,只需使用完全指定的路径发送文本文件即可。对于这个显而易见的问题,我很抱歉,但我无法弄清楚。

我也尝试过像这样做:

 const  exec  = require('child_process').exec;
        exec('"node C:/Users/NikitaSeliverstov/node_modules/.bin/send.js"');

你能展示一下你遇到的错误吗? - Hussain Ali Akbar
我没有任何错误。 - Nikita Seliverstov
1个回答

9

您需要指定一个回调函数,该函数将在执行exec命令后被调用:

我创建了2个文件:

anotherTest.js

console.log('another test');

test.js

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

const child = exec('node anotherTest.js',
    (error, stdout, stderr) => {
        console.log(`stdout: ${stdout}`);
        console.log(`stderr: ${stderr}`);
        if (error !== null) {
            console.log(`exec error: ${error}`);
        }
});

这是输出结果:

stdout: another test

stderr: 

您可以在终端/控制台中执行"node test.js"来运行test.js脚本。您可以使用您想要的参数更改exec命令的参数。


可以了,谢谢。所以问题是没有回调函数就无法工作? - Nikita Seliverstov
1
每当需要执行异步操作时,您需要定义一个回调函数。否则,代码将不会等待操作完成。 - Hussain Ali Akbar
1
根据您所使用的节点版本,您可以使用Promise和async/await替换/包装回调函数。 - Hussain Ali Akbar
很高兴我能帮到你。 - Hussain Ali Akbar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接