初学nodejs+express,打造cms系统(6)补充运行环境优化
本来主要功能完成了,但是感觉少了点什么,其实就是自创(或许也有别人想到吧)了一套运行环境方案。
实际部署的时候,我们是需要与nginx结合的,使用nodejs来提供静态资源的web服务非常的不nice,必须专业的人干专业的事情。开发的时候我们就得整一套贴合实际生产环境的开发调试环境。集成一套nginx
在bin目录下复制 一个nginx,“nginx.exe”重命名为“nginx_my.exe”,调整启动脚本start.js
#!/usr/bin/env node var app = require('../app'); var debug = require('debug')('demo1:server'); var http = require('http'); var config = require('../config/config'); var fs = require("fs"); // 加载fs文件系统模块 var exec = require('child_process').exec; var port = config.port; //从配置文件读取到端口号 var port_nginx= config.port_nginx; // nginx端口 var www_path=__dirname+'/wwwroot'; www_path=www_path.replace(/\\/g,'/'); var nginx_conf=` server { listen ${port_nginx}; server_name _; # 域名 "_" 代表获取匹配所有 charset utf-8; client_max_body_size 500M; root ${www_path};# 站点根目录 index index.html index.htm; location /${config.admin_dir}/ { proxy_pass http://127.0.0.1:${port}/${config.admin_dir}/; # nginx代理的服务 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /api/ { proxy_pass http://127.0.0.1:${port}/api/; # nginx代理的服务 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } `; var nginx_conf_path=__dirname+'/nginx/conf/my.conf'; nginx_conf_path=nginx_conf_path.replace(/\\/g,'/'); console.log(nginx_conf_path); fs.writeFileSync(nginx_conf_path, nginx_conf); //处理批处理命令 var nginx_path=__dirname+'/nginx/'; nginx_path=nginx_path.replace(/\\/g,'/'); var nginx_path_arr=nginx_path.split('/'); var disk_dir=nginx_path_arr[0]; var nginx_bat=` cd ${disk_dir} cd ${nginx_path} nginx_my.exe -g "daemon off;" `; var nginx_bat_path=`${nginx_path}nginx_my.bat`; fs.writeFileSync(nginx_bat_path, nginx_bat); var nginx_cmd=`${nginx_bat_path}`; console.log(nginx_cmd); //杀死nginx 进程 taskkill /f /im **.exe var nginx_exe=config.nginx_exe; var nginx_kill_cm=`taskkill /f /im ${nginx_exe}`; exec(nginx_kill_cm, function(error, stdout, stderr) { // 获取命令执行的输出 var exec_pid=exec(nginx_cmd, function(error, stdout, stderr) { // 获取命令执行的输出 //console.log(error, stdout, stderr); }); console.log('************exec_pid***********'); console.log(exec_pid.pid); }); app.set('port', port); /** * Create HTTP server. */ var server = http.createServer(app); /** * Listen on provided port, on all network interfaces. */ server.listen(port); server.on('error', onError); server.on('listening', onListening); /** * Event listener for HTTP server "error" event. */ function onError(error) { if (error.syscall !== 'listen') { throw error; } var bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port; // handle specific listen errors with friendly messages switch (error.code) { case 'EACCES': console.error(bind + ' requires elevated privileges'); process.exit(1); break; case 'EADDRINUSE': console.error(bind + ' is already in use'); process.exit(1); break; default: throw error; } } /** * Event listener for HTTP server "listening" event. */ function onListening() { var addr = server.address(); var bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port; debug('Listening on ' + bind); }
测试了几天整体运行还好。