• 【nodejs笔记2】认识express框架


    app.js:启动文件,或者说入口文件
    package.json:存储着工程的信息及模块依赖,当在 dependencies 中添加依赖的模块时,运行 npm install,npm 会检查当前目录下的 package.json,并自动安装所有指定的模块
    node_modules:存放 package.json 中安装的模块,当你在 package.json 添加依赖的模块并安装后,存放在这个文件夹下
    public:存放 image、css、js 等文件
    routes:存放路由文件
    views:存放视图文件或者说模版文件
    bin:存放可执行文件
     
     
    打开app.js,看一看里面的内容:
     1 //通过require()加载express、path模块。以及routes文件夹下的index.js 和user.js路由文件
     2 var express = require('express');
     3 var path = require('path');
     4 var favicon = require('serve-favicon');
     5 var logger = require('morgan');
     6 var cookieParser = require('cookie-parser');
     7 var bodyParser = require('body-parser');
     8 
     9 var routes = require('./routes/index');
    10 var users = require('./routes/users');
    11 
    12 var app = express();  //生成一个express实例app
    13 
    14 // view engine setup
    15 app.set('views', path.join(__dirname, 'views'));//设置 views 文件夹为存放视图文件的目录, 即存放模板文件的地方,__dirname 为全局变量,存储当前正在执行的脚本所在的目录。
    16 app.set('view engine', 'ejs');// 设置视图模板引擎为 ejs
    17 
    18 // uncomment after placing your favicon in /public
    19 //app.use(favicon(__dirname + '/public/favicon.ico'));   //设置/public/favicon.ico为favicon图标
    20 app.use(logger('dev'));//加载日志中间件
    21 app.use(bodyParser.json());//加载解析json的中间件
    22 app.use(bodyParser.urlencoded({ extended: false }));//加载解析urlencoded请求体的中间件
    23 app.use(cookieParser());//加载解析cookie的中间件
    24 app.use(express.static(path.join(__dirname, 'public')));//设置public文件夹为存放静态文件的目录
    25 
    26 //路由控制器
    27 app.use('/', routes);
    28 app.use('/users', users);
    29 
    30 // catch 404 and forward to error handler     捕获404错误,并转发到错误处理器。
    31 app.use(function(req, res, next) {
    32     var err = new Error('Not Found');
    33     err.status = 404;
    34     next(err);
    35 });
    36 
    37 // error handlers
    38 
    39 // development error handler
    40 // will print stacktrace
    41 //开发环境下的错误处理器,将错误信息渲染error模版并显示到浏览器中。
    42 if (app.get('env') === 'development') {
    43     app.use(function(err, req, res, next) {
    44         res.status(err.status || 500);
    45         res.render('error', {
    46             message: err.message,
    47             error: err
    48         });
    49     });
    50 }
    51 
    52 // production error handler
    53 // no stacktraces leaked to user
    54 //生产环境下的错误处理器,将错误信息渲染error模板并显示到浏览器中。
    55 app.use(function(err, req, res, next) {
    56     res.status(err.status || 500);
    57     res.render('error', {
    58         message: err.message,
    59         error: {}
    60     });
    61 });
    62 
    63 module.exports = app;//导出app实例并供其它模块使用
    • require    加载模块和引用路由
    • 生成express实例app
    • app.set
    • app.use
    • 三种错误情况响应:捕获404错误  、开发环境下的错误处理器、  生产环境下的错误处理器。
    • module.exports = app  导出app实例供其它模块使用
    答疑解惑
    app.set和app.use的用法 err,req,res,next参数
       
     
     
     
     
    打开./bin/www,看一看内容
     1 #!/usr/bin/env node    //node是可执行文件
     2 var debug = require('debug')('blog');  //引用debug模块,打印调试日志
     3 var app = require('../app');//导入app实例
     4 
     5 app.set('port', process.env.PORT || 3000);//设置端口号
     6 
     7 //启动工程并监听3000端口
     8 var server = app.listen(app.get('port'), function() {
     9   debug('Express server listening on port ' + server.address().port);
    10 });

    打开routes/index.js,看一看内容

    1 var express = require('express');
    2 var router = express.Router();  //创建路由实例
    3 
    4 /* GET home page. */
    5 router.get('/', function(req, res) {   //捕获访问主页的GET请求
    6   res.render('index', { title: 'Express' });
    7 });
    8 
    9 module.exports = router;//导出路由,并在app.js中以app.use('/',routes);加载

    生成一个路由实例用来捕获访问主页的GET请求,导出这个路由并在app.js中通过app.use('/', routes); 加载。这样,当访问主页时,就会调用res.render('index', { title: 'Express' });渲染views/index.ejs模版并显示到浏览器中。

     打开views/index.ejs,看一看内容

     1 <!DOCTYPE html>
     2 <html>
     3   <head>
     4     <title><%= title %></title>
     5     <link rel='stylesheet' href='/stylesheets/style.css' />
     6   </head>
     7   <body>
     8     <h1><%= title %></h1>
     9     <p>Welcome to <%= title %></p>
    10   </body>
    11 </html>

    渲染模板index.ejs中,传入一个变量 title 值为 express 字符串,模板引擎会将所有 <%= title %> 替换为 express ,然后将渲染后生成的html显示到浏览器中,如上图所示。

  • 相关阅读:
    TCP/IP模型及OSI七层参考模型各层的功能和主要协议
    Java – 虚函数、抽象函数、抽象类、接口
    Java CAS原理
    CAP原理中的一致性
    分布式系统CAP理论与CA选择
    数据库事务的特性、隔离级别、传播策略
    Java线程与锁
    JVM内存模型
    Java对象创建的过程及对象的内存布局与访问定位
    为什么Java匿名内部类访问的方法参数或方法局部变量需要被final修饰
  • 原文地址:https://www.cnblogs.com/xujingbo/p/4164362.html
Copyright © 2020-2023  润新知