• 程序的入口-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;
  • 相关阅读:
    项目选题报告答辩总结
    第七次作业--项目需求分析(团队)
    第六次作业--结对编程第二次
    第四次作业——项目选题报告
    eclipse 部署maven 的web 项目提示找不到类的问题
    Spring中的applicationContext.xml与SpringMVC的xxx-servlet.xml的区别
    在eclipse中maven web项目搭建
    eclipse maven plugin 插件 安装 和 配置
    Maven最佳实践:Maven仓库
    eclipse jadclipse 反编译安装说明
  • 原文地址:https://www.cnblogs.com/y8932809/p/6178297.html
Copyright © 2020-2023  润新知