以前www和app.js它俩是在一起的 现在业务独立开了 www 创建了服务 监听了error事件和开始监听事件 具体的每个请求的中间件都放到app.js中去了
WWW文件:
#!/usr/bin/env node var debug = require('debug')('liveApp'); //加载debug模块 打印的是开发者自己在 控制台 打印的信息,它的目的是要代替 console.log() , var app = require('../app'); app.set('port', process.env.PORT || 3000); //设置端口号为3000 //启动监听3000端口 var server = app.listen(app.get('port'), function() { debug('Express server listening on port ' + server.address().port); }); //监听socketid require('../lib/live_server').listen(server);
APP.JS文件:
var express = require('express'); var path = require('path'); //引用path模块,用来获取项目中的相对和绝对路径 var favicon = require('serve-favicon'); //用于设置页面的logo也就是浏览器左上角的图表,本项目中没有使用到 var logger = require('morgan'); //记录器 在控制台中,显示req请求的信息 var cookieParser = require('cookie-parser'); //cookieParser()实际上是对http传入的cookie进行解析后赋值给req.cookies var bodyParser = require('body-parser'); //bodyParser用于解析客户端请求的body中的内容,内部使用JSON编码处理,url编码处理以及对于文件的上传处理 var routes = require('./routes/index'); //获取路由文件,在4.0版本后,对路由进行模块化,也就是说只引用对应的路由模块,内部的细节在对应的文件中实现。 var users = require('./routes/users'); var rooms=require('./routes/rooms'); var app = express(); //express() 表示创建express应用程序 // view engine setup app.set('views', path.join(__dirname, 'views')); //告诉Express在views目录下搜索所有模板 app.set('view engine', 'ejs'); //这些模板上应用ejs模板引擎(还有jade引擎也很常用) // uncomment after placing your favicon in /public //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); //设置项目logo,在public文件夹下的favicon.ico文件 app.use(logger('dev')); //在控制台上显示req的请求信息,express 默认的设置格式 app.use(bodyParser.json()); //bodyParser中间件可以分为全局拦截和局部拦截,本项目使用全局拦截,但是局部拦截是常用的方式。 app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); //使用中间件 app.use(express.static(path.join(__dirname, 'App'))); //将静态资源文件所在的目录作为参数传递给 express.static 中间件就可以提供静态资源文件的访问 例如css文件、图片等 //在访问请求静态文件/stylesheets/style.css时,就会先执行less-middleware,再执行express.static,返回public/stylesheets/style.css给浏览器端。 app.all('*', function (req, res, next) { //项目中前台访问接口时,存在跨域现象,这是设置项目允许所有域名进行访问,不进行拦截,也可以设置只允许特定的域名进行访问。 res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS"); res.header("X-Powered-By", ' 3.2.1'); res.header("Content-Type", "application/json;charset=utf-8"); next(); }); app.use('/', routes); //使用路由中间件 app.use('/users', users); app.use('/rooms', rooms); //设置app.use([path], function)是指在访问前缀为path的路径执行时中间函数function,上面的代码中没有指定path,则表示在访问默认前缀/的路径时执行中间函数function。比如上面代码中的 // catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); // error handlers // development error handler // will print stacktrace if (app.get('env') === 'development') { //运行时环境,默认为 process.env.NODE_ENV 或者 "development app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: err }); }); } // production error handler // no stacktraces leaked to user app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: {} }); }); module.exports = app;