Node.js-process.exit并将整个console.log消息附加到文本文件中

时间:2019-06-01 19:24:05

标签: javascript node.js puppeteer

我对Puppeteer不满意。 我正在使用登录网站的脚本。如果用户名或密码错误,我想将控制台消息记录在一个文件中,并以错误号退出。此数字很重要,因为它将在Excel VBA中使用。 我使用文件批处理(Windows)运行node.js脚本,并且在脚本开头使用了一个函数来添加控制台消息。

我运行一个批处理文件来运行脚本:

node C:\*my-path*\node-script.js
exit /b %errorlevel%

我可以在控制台中看到该消息,但是在日志文件中没有完整的错误消息,因为process.exit(1)在其之前关闭了该过程。

这是附加console.log消息的功能:

fs.unlinkSync("./tmp/node-js.log");
console.log = function(msg) {
    fs.appendFile("./tmp/node-js.log", msg+'\r\n', 'ascii', function(err) {
        if(err) {
            return trueLog(err);
        }
    });
    trueLog(msg);

然后,这是要登录的代码:

await page.goto('https://google-wrong.com/', {  //a wrong url to test
                waitUntil: 'networkidle2',
                timeout: 10000
}).catch(error => {
    throw (console.log('\r\n'+ 'JAVASCRIPT * Wrong Url ! * ' + error)), process.exit(1) });

因此,如果我使用browser.close()而不是process.exit(1),则可以附加整个消息,但是不能退出并显示错误代码。这是我的console.log:

> Open browser in memory... Done!
> Connect to google-wrong.com... Error!
> JAVASCRIPT * Wrong Url ! * Error: net::ERR_NAME_NOT_RESOLVED at https://google-wrong.com/

在Dos提示下,我看到:

> exit /b 0

如果我使用process.exit(1),则可以看到“错误退出”数字:

  

退出/ b 1

...但是我无法记录整个消息:

> Open browser in memory... Done!
> Connect to google-wrong.com... Error

有什么想法吗? 在此先感谢您,并为我的英语不好对不起,我希望我能说清楚。

1 个答案:

答案 0 :(得分:0)

我认为您应该在fs.appendFileSync函数中使用console.log,而不必在catch处理程序中使用throw关键字