node.js - 如何在虚拟主机中配置 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 是服务器文件夹。所以:
- 目录:
-
- public_html -> 静态文件前端。
-
- 服务器 -> 节点应用程序、路由、控制器等。
在 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]
我不太明白,我没有这方面的经验。
我的想法是
- 在 cpanel 的终端中使用 nohup 运行节点应用程序,以便节点应用程序将始终运行。检查!
- 尝试前端网站中的联系表。失败!我得到超时连接,但我什么也没得到。
- 在节点 app.js 中,当我使用联系表单时,我想在终端 cpanel 中看到 console.log()。这是为了测试并且知道这一切都很好,但我在终端中看不到任何东西。我怎样才能做到这一点?
如果缺少任何信息,请告诉我,我将分享代码。我需要尽快解决这个问题。谢谢你的阅读,对不起我的英语。
解决方案
- 尝试 在 .htaaccess 文件的所有位置使用https://mywebsite.com:3050/ 而不是http://127.0.0.1:3050/
- 您可以在其日志文件中从 tail 命令获取 nohup 的日志。
推荐阅读
- variables - 我们如何确保 ansible 注册变量具有特定属性
- amazon-web-services - 如何在 Windows 10 上配置 AWS CLI
- ios - SwiftUI 在按钮单击时打开另一个视图
- python - 如何将一个列表中的值随机替换为另一个列表中的值?
- android - 如何每秒观察一个方法String的返回值?
- apache - 强制从 https://example.com 重定向到 https://www.example.com
- reactjs - React Native App 不会显示 Api 结果
- java - 如何复制具有重复值的 HashMap
- python - 使用 Python 从 .txt 文件中随机生成加权词列表
- ios - 带有 MVVMCross 的 Xamarin.iOS 仅在 ViewControllers 处调用构造函数