关于前端:nodeejspm2-发布

我的项目简介

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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理