首页 > 解决方案 > 如何在虚拟主机中配置 Node.js?

问题描述

我创建了一个带有 create-react-app 的网站,并带有一个与后端通信的联系表单(nodejs 和 nodemailer)。在 localhost 中完美运行。

当我在支持 nodejs 应用程序的虚拟主机(wnpower.com/web-hosting 是我购买的主机)中上传网站时,我无法使用联系表单,因为我在路径“https ”中得到“net::ERR_CONNECTION_TIMED_OUT” ://mywebsite.com/api/sendmessage”。似乎前端找不到后端路由器或我无法理解的东西。

在虚拟主机的 CPanel 中,我在终端中安装了 Nodejs 并运行了一个测试应用程序,运行良好。但是当我想在前端使用节点应用程序时,它不起作用。

我在节点 app.js 文件中的配置:

require("./config"); // all process.env

const express = require("express");
const path = require('path');
const app = express();
const bodyParser = require("body-parser");

// ALL ROUTES
const contact_routes = require('./routes');

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.listen(process.env.PORT, () => {
    console.log("Server listening at port "+process.env.PORT);
});

// Configure Header HTTP
app.use((req, res, next) => {
    res.header("Access-Control-Allow-Origin", "*");
    res.header(
        "Access-Control-Allow-Headers",
        "Authorization, X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Allow-Request-Method"
    );
    res.header("Access-Control-Allow-Methods", "GET, POST");
    res.header("Allow", "GET, POST");
    next();
});

app.use(express.static(path.join(__dirname, '../public_html')));

// CONNECT ROUTES WITH API
app.use(process.env.API_URL, contact_routes);

module.exports = {
    app
};

public_html 目录是我使用命令 npm run-script build 构建的静态文件,__dirname 是服务器文件夹。所以:

在 config.js 文件中有 process.env.PORT,端口是 3050。

在 routes.js 中:

var express = require('express');
var controller = require('./controller');

var router = express.Router();

router.post('/sendmessage', controller.sendMessage);

module.exports = router;

在 .htaccess 文件中:

DirectoryIndex ""
 
RewriteEngine On
RewriteCond %{REQUEST_URI} ^.*/index.*
RewriteRule ^(.*)$ http://127.0.0.1:3050/ [P,L]
 
RewriteRule ^$ http://127.0.0.1:3050/ [P,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://127.0.0.1:3050/$1 [P,L]

我不太明白,我没有这方面的经验。

我的想法是

  1. 在 cpanel 的终端中使用 nohup 运行节点应用程序,以便节点应用程序将始终运行。检查!
  2. 尝试前端网站中的联系表。失败!我得到超时连接,但我什么也没得到。
  3. 在节点 app.js 中,当我使用联系表单时,我想在终端 cpanel 中看到 console.log()。这是为了测试并且知道这一切都很好,但我在终端中看不到任何东西。我怎样才能做到这一点?

如果缺少任何信息,请告诉我,我将分享代码。我需要尽快解决这个问题。谢谢你的阅读,对不起我的英语。

标签: node.js.htaccessweb-hosting

解决方案


  1. 尝试 在 .htaac​​cess 文件的所有位置使用https://mywebsite.com:3050/ 而不是http://127.0.0.1:3050/
  2. 您可以在其日志文件中从 tail 命令获取 nohup 的日志。

推荐阅读