使用 cPanel 的生产 Angular/nodejs 应用程序。 Node.js 应用程序错误?

Production Angular/nodejs app with cPanel. Node.js app error?

我已经通过 cPanel 部署了一个 angular 应用程序(使用命令 'ng build --prod="true"' 编译)并且它当前处于运行状态:https://nathankeogh.com

它还使用 node.js 后端,即 cPanel 上的 运行。应用程序启动文件是“server.js”。

我已经从 MySQL 数据库中导入数据以及 cPanel 上的数据等。 (使用命令“sed -e 's/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g' -i myfilename.sql”来解决未知的归类错误。)

我的 prod.envrionment.ts 文件当前将 ApiURL 指向“httpS://nathankeogh.com”。

我已经更新了 cPanel 上的 node.js 应用程序,使用 cPanel 上数据库的名称和凭据。

访问该网站时,它会按预期加载登录页面,但如您所见,在 chrome 的控制台和数据中出现内部服务器错误(未知)不会 post/get:

开发版运行正常。

进一步开发: 当鼠标悬停在 chrome 控制台中的“错误”文本上时,它会显示完整的错误输出:

“Web 应用程序无法启动”。我相信它是一个 cPanel 节点应用程序错误:

在此之后,cPanel 错误表明 server.js 文件第 7 行存在问题?还是 22? ("app.use('/accounts', require('./accounts/accounts.controller'));") 任何人都可以确定 server.js 文件有什么问题导致问题?

非常感谢您在确定问题或建议方面的任何帮助。谢谢。

node.js cPanel 配置:

Server.js:

require('rootpath')();
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const cors = require('cors');
const errorHandler = require('_middleware/error-handler');

const multer = require('multer')
//const upload = multer({ dest: 'images/' })
var fileExtension = require('file-extension')

//app.use(express.static(__dirname+'/uploaded-files'));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(cookieParser());

// allow cors requests from any origin and with credentials
app.use(cors({ origin: (origin, callback) => callback(null, true), credentials: true }));

// api routes
app.use('/accounts', require('./accounts/accounts.controller'));
app.use('/lab-swaps', require('./lab-swaps/lab-swaps.controller'));

// swagger docs route
app.use('/api-docs', require('_helpers/swagger'));

// global error handler
app.use(errorHandler);

// start server
const port = process.env.NODE_ENV === 'production' ? (process.env.PORT || 80) : 4000;
app.listen(port, () => console.log('Server listening on port ' + port));

// Basic Get Route
app.get('/', function (req, res) {
    res.json({ message: 'Server Started!' });
});

var storage = multer.diskStorage({

    // Setting directory on disk to save uploaded files
    destination: function (req, file, cb) {
        cb(null, 'uploaded-files')
    },

    // Setting name of file saved
    filename: function (req, file, cb) {
        cb(null, file.fieldname + '-' + Date.now() + '.' + fileExtension(file.originalname))
    }
})

var upload = multer({
    storage: storage,
    limits: {
        // Setting Image Size Limit to 2MBs
        fileSize: 2000000
    },
    fileFilter(req, file, cb) {
        if (!file.originalname.match(/\.(jpg|jpeg|png)$/)) {
            //Error 
            cb(new Error('Please upload JPG and PNG images only!'))
        }
        //Success 
        cb(undefined, true)
    }
})

app.post('/uploadedImages', upload.single('uploadedImage'), (req, res, next) => {
    const file = req.file
    console.log(req);
    if (!file) {
        const error = new Error('Please upload a file')
        error.httpStatusCode = 400
        return next(error)
    }
    res.status(200).send({
        statusCode: 200,
        status: 'success',
        uploadedFile: file
    })

}, (error, req, res, next) => {
    res.status(400).send({
        error: error.message
    })
})

rootpath 库似乎维护得不好,因此可能会导致问题。

删除它并改用相对路径。

const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const cors = require('cors');
const errorHandler = require('./_middleware/error-handler');
 
const multer = require('multer');

相对路径更常规,因此您将避免混淆未来使用您的代码的开发人员,并且您将避免 potential issues 使用您的编辑器。