关于前端:nodeejspm2-发布

45次阅读

共计 2503 个字符,预计需要花费 7 分钟才能阅读完成。

我的项目简介

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

正文完
 0