美文网首页
express 服务框架(二)框架结构及配置文件解析

express 服务框架(二)框架结构及配置文件解析

作者: hunter97 | 来源:发表于2018-11-29 19:01 被阅读0次

    一、框架目录结构
    ├── bin ------------------------------------- 存放可执行文件
    │   ├── www ------------------------------ 应用的主入口
    ├── public ------------------------------------- 静态文件目录
    ├── views ------------------------------------- 视图文件目录
    ├── routes ------------------------------------- 路由文件目录
    │   ├── index.js ------------------------------ 路由入口文件
    ├── node_modules ---------------------------- 存放依赖的目录
    ├── app.js ---------------------------- 启动文件即入口文件
    ├── package.json ---------------------------- node配置文件,存储着工程的信息及模块依赖
    

    其中 /bin/www 是应用的主入口。应用的真正入口是app.js文件,所以www文件先把app.js文件引进来,其余的内容主要就是创建了一个node HTTP server。

    二、app.js 文件
    //引入第三方库
    const createError = require('http-errors');
    const express = require('express');
    const path = require('path');
    const cookieParser = require('cookie-parser');
    const  logger = require('morgan');
    
    //引入路由文件
    const indexRouter = require('./routes/index');
    const  usersRouter = require('./routes/users');
    
    //创建express框架
    const app = express();
    
    //设置模板
    // views 设置了模板的位置
    app.set('views', path.join(__dirname, 'views'));
    //设置了要使用的模板引擎
    app.set('view engine', 'ejs');
    
    //使用上面引入的第三方库
    app.use(logger('dev'));
    app.use(express.json());
    app.use(express.urlencoded({ extended: false }));
    app.use(cookieParser());
    //设置图片、js、css等静态资源目录
    app.use(express.static(path.join(__dirname, 'public')));
    //设置浏览器标签上的logo图标,可以不做
    //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
    
    //设置路由路径与引入的文件关联
    app.use('/', indexRouter);
    app.use('/users', usersRouter);
    
    //处理错误的http请求
    //捕获404错误,并转发到错误处理器
    app.use(function(req, res, next) {
      next(createError(404));
    });
    //错误处理器
    app.use(function(err, req, res, next) {
      //生产环境下的错误处理器,不会将错误信息泄露给用户
      res.locals.message = err.message;
      res.locals.error = req.app.get('env') === 'development' ? err : {};
      //开发环境下的错误处理器,将错误信息渲染error模版并显示到浏览器中
      res.status(err.status || 500);
      res.render('error');
    });
    
    //导出app实例供其他模块调用
    module.exports = app;
    
    三、bin/www 文件

    /bin目录下的www 是应用的主入口,这里主要介绍上半部分。

    /**
     * node 可执行文件
     */
    #!/usr/bin/env node 
    
    /**
     * 引入app.js中导出的app实例
     */
    var app = require('../app');
    /**
     * 引入debug模块,打印调试日志
     */
    var debug = require('debug')('demo:server');
    /**
     * 引入http模块
     */
    var http = require('http');
    
    /**
     * 设置端口号并启动工程并监听3000端口
     */
    var port = normalizePort(process.env.PORT || '3000');
    app.set('port', port);
    
    四、routes文件夹

    在之前的app.js中,我们曾引入过一些路由文件。这里我们以其中的index.js文件为例。

    //引入express框架
    var express = require('express');
    //生成路由实例
    var router = express.Router();
    
    //捕获访问`/`根目录的的GET请求
    router.get('/', function(req, res, next) {
      //调用res.render渲染views/index.ejs模版并显示到浏览器
      res.render('index', { title: 'Express' });
    });
    
    //导出路由
    module.exports = router;
    
    五、views文件夹

    视图文件夹,放置视图文件。

    参考文献:
    Express Generator 生成 Express应用的目录结构express框架文件解析
    前行的路,不怕万人阻挡,只怕自己投降;人生的帆,不怕狂风巨浪,只怕自己没胆量!有路,就大胆去走;有梦,就大胆飞翔。

    相关文章

      网友评论

          本文标题:express 服务框架(二)框架结构及配置文件解析

          本文链接:https://www.haomeiwen.com/subject/craaqqtx.html