初学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);
}


测试了几天整体运行还好。
