我的项目简介

一个小网站,须要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,一切正常的话就能够应用你配置的域名或者地址进行拜访了