我的项目简介
一个小网站, 须要 seo, 没思考 nuxt 或者 ssr; 业务不简单间接 node+ejs;
前端应用 node 转发申请到真正的后端承受数据实现前后拆散; 线上应用 nginx 代理, 过程治理应用 pm2
创立目录
创立一个空文件夹并在此 cmd 执行以下操作, 请留神,肯定不能应用 powershell, 否则 windows 会报对于 express 的安全策略的谬误
npm install express express-generator -g // 曾经装置了就疏忽
express -e myapp // 应用 express-generator 疾速生成我的项目
// 开始我的项目
cd myapp
npm install
npm start
根本配置
1,package.json
的配置
其余的不论, 次要是批改 scripts
这个字段, 配置启动端口以及启动形式,cross-env
是一个跨平台启动工具, 请自行npm
装置
"scripts": {
"start": "node ./bin/www",
"dev": "set NODE_ENV=development && set PORT=4747 && node ./bin/www",
},
2,pm2.config.js 的配置
在我的项目根目录创立一个 pm2.config.js
的文件, 这个文件次要是对 pm2 做一些根本配置
module.exports = {
apps: [
{
name: "demo",
script: './bin/www',
exec_mode: "cluster",
instances: 1,
error_file: "./logs/err.log",
out_file: "./logs/out.log",
merge_logs: true,
log_date_format: "YYYY-MM-DD HH:mm:ss",
ignore_watch: 'logs',
env: {
NODE_ENV: 'development',
PORT: 4747
},
env_production: {
NODE_ENV: 'production',
PORT: 4747
},
}
]
}
我的项目在本地启动就应用 node 进行失常的 npm run dev
启动; 如果是线上就应用 pm2 启动; 在控制台应用 pm2 start pm2.config.js --env production --watch
启动;
最初失去一个这样的目录
转发申请
在 app.js 外面须要对申请进行, 转发至真正的后端;
var querystring = require('querystring'); // 提供用于解析和格式化 URL 查问字符串的实用工具
console.log(myTrim(process.env.NODE_ENV)) //myTrim 是一个前后去空格的函数, 过后在这里折腾了很久
var myhost = '';
if (myTrim(process.env.NODE_ENV)=="development") { // 能够简略判断一下环境设置接口地址
myhost = "520.131.4.1" // 本地后盾地址
} else {myhost = "110.119.120.520" // 线上后盾}
//web 是后端接口的对立前缀
app.all(/\/web/, function (req, res) {if (req.url.indexOf('/web') != -1 && req.method !== "GET") {var strData = querystring.stringify(req.body)
let options = {
host: myhost, // 本地, 后盾申请地址
port: 5222,
path: req.url,
method: 'POST',
};
delete req.headers['content-length'];
options.headers = req.headers;
// options.headers = Object.assign(options.headers, req.headers); // 带上客户端申请头(蕴含 cookie 之类的货色)
let httpRequest = http.request(options, function (res) {
let _data = '';
res.on('data', function (chunk) {_data += chunk;});
res.on('end', function () {sendData(_data);
});
});
//httpRequest.write(strData); // 写入数据到申请主体
httpRequest.write(strData);
httpRequest.end();
function sendData(data) {res.send(data);
}
} else {res.redirect(302, '/404');
return;
}
});
上服务和 nginx 配置
应用 xftp
工具把除了node_modules
之外的所有目录全副上传到你本人服务器的指定目录下, 而后应用 npm install
重新安装一下, 装置实现之后应用pm2 start pm2.config.js --env production --watch
启动我的项目; 如果一切正常的话你会失去这样的提醒, 那么祝贺你胜利了
在搞定了 node
之后当初对 nginx 进行配置;
nginx.conf 配置文件
server {
listen 80;
charset utf-8;
server_name my.server.com 120.119.114.911;
location / {
proxy_pass http://localhost:4747; #这里其实就是应用 nginx 把 80 端口的服务转到了你本人的 node 服务下来
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
配置实现之后应用 nginx -c /etc/nginx/nginx.conf -s reload
刷新一下 nginx, 一切正常的话就能够应用你配置的域名或者地址进行拜访了