程序的入口-www文件和app文件

以前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;

 

posted @ 2016-12-14 10:39  8932809  阅读(1038)  评论(0编辑  收藏  举报