我的项目简介
一个小网站,须要seo,没思考nuxt或者ssr;业务不简单间接node+ejs;
前端应用node转发申请到真正的后端承受数据实现前后拆散;线上应用nginx 代理,过程治理应用pm2
创立目录
创立一个空文件夹并在此cmd 执行以下操作,请留神,肯定不能应用powershell,否则windows会报对于express的安全策略的谬误
npm install express express-generator -g //曾经装置了就疏忽express -e myapp //应用 express-generator 疾速生成我的项目//开始我的项目cd myappnpm installnpm 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,一切正常的话就能够应用你配置的域名或者地址进行拜访了