如何启用 node.js 应用程序从 cpanel 登录?

问题描述 投票:0回答:3

我有一个使用 nodemailer 发送电子邮件的 node.js 应用程序。它在本地主机上工作正常,但是当我从服务器上尝试时,我无法收到任何邮件。

因为,应用程序的其他活动工作正常意味着我假设 nodemailer 已正确安装在服务器上。我尝试了使用主机作为我的服务器和使用 gmail 作为服务的两种方式。这是我上次尝试的。这在本地主机上也能正常工作。但是,当我把它放在服务器上时,我没有得到任何回应。

我有 nodemailer 的配置为:


const output = `
    <h3>Limit Details</h3>
    <p>Admin has added ${limit} quota(s) to ${username}.</p>
  `;

  // create reusable transporter object using the default SMTP transport
  let transporter = nodemailer.createTransport({
    service: 'gmail',
    port: 25,
    secure: false, // true for 465, false for other ports
    auth: {
        user: '<gmail>', 
        pass: '<password>' 
    }
  });

  // setup email data with unicode symbols
  let mailOptions = {
      from: '"Sender" <sender gmail>', // sender address
      to: '<receiver gmail>', // list of receivers
      subject: 'Quota added information.', // Subject line
      html: output // html body
  };

  // send mail with defined transport object
  transporter.sendMail(mailOptions, (error, info) => {
      if (error) {
          return console.log(error);
      }
      console.log('Message sent: %s', info.messageId);   
      console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info));
  });

为了测试,我已经设置了 messageId 和 Preview Url 那么,从哪里可以在 cpanel 中查看此控制台消息?我如何从我的 cpanel 应用程序中查看这些安慰的东西??

node.js cpanel error-logging
3个回答
3
投票

不幸的是,据我所知,没有简单的方法可以访问 cpanel 服务器上的节点日志。 我通常做的是设置 log4js 将日志写入文件:

const log4js = require('log4js');

log4js.configure({
  appenders: { everything: { type: 'file', filename: 'logs.log' } },
  categories: { default: { appenders: ['everything'], level: 'ALL' } }
});

const logger = log4js.getLogger();

然后你可以制作日志:

logger.debug('log message');

您还可以使用服务器提供日志文件:

app.get('/log', (req, res) => {
  res.sendFile(path.join(__dirname + '/logs.log'));
});

2
投票

cPanel 的应用程序管理器不是很充实。我一直在尝试并将其与我习惯使用的 (PM2) 进行比较,并将切换回 PM2。 如果有人有兴趣支持,我确实向 cPanel 提出了功能请求。

否则,答案是使用@zenott 建议的自定义记录器写出。但是,我更喜欢覆盖 console.log,这样可以在需要时轻松切换回常规控制台日志记录。

我的解决方案:

const moment = require('moment')
const fs = require('fs')
let logStream = fs.createWriteStream('log.txt')
let console = {}
console.log = (obj) => {
  var s = ''
  if (typeof obj === 'string')
    s = obj
  else
    s = JSON.stringify(obj)

  var dS = '[' + moment().format(momentFormat) + '] '
  s = `[${dS}] ${s}'\n'`
  logStream.write(s)
}

0
投票

有一种更简单的方法可以访问 cPanel 服务器上的 NodeJS 应用程序日志。 而不是使用:

console.log()

用途:

console.error()

这将在您的 cPanel 上填充位于 NodeJS 应用程序根文件夹中的

stderr.log
文件,而无需保留。 它甚至可以输出 Circular 和 JSON 格式,而无需
stringify()
.

更新:

以上仅当 cPanel 在 CloudLinux 上运行时才有效(

Setup NodeJS App
可用)。

对于其他发行版(仅

Application Manager
可用),以下代码将强制
console.log
console.error
命令写入文件
debug.log
然后您可以通过
tail -f debug.log
命令收听:

var fs = require('fs');
var util = require('util');
var log_file = fs.createWriteStream(__dirname + '/debug.log', {flags : 'w'});
var log_stdout = process.stdout;

console.log = function(d) { //
  log_file.write('LOG: '+ util.format(d) + '\n');
  log_stdout.write('LOG: '+ util.format(d) + '\n');
};

console.error = function(d) { //
  log_file.write('ERROR: '+ util.format(d) + '\n');
  log_stdout.write('ERROR: '+ util.format(d) + '\n');
};
© www.soinside.com 2019 - 2024. All rights reserved.