乐趣区

关于node.js:对于express框架的基本理解

引言

* 因为 nodejs 是之前很久学的,当初曾经遗记了语法规定,当初间接从框架下手,反其道而行之去了解 nodejs。
在 nodejs 外面创立 web 服务器是很麻烦的事件,要用到 http 模块,express 框架就是来优化这么一个过程的工具。
在学习 express 框架的时候发现了它于 vue 的殊途同归之妙,在路由上的用法及其类似。可能这也是为什么 vue 和 express 都叫做框架的起因吧,不过 express 是服务端的框架。*

装置

 在终端应用
    `cnpm/npm install express`
即可

应用

    // 须要绑定到一个对象身上能力去应用它,所以
    const express = require('express');
    // 绑定之后须要用这个对象去创立一个 web 服务器
    const app = express();
    // 增加路由,get 只能增加特定路由,如果为 '/' 则 404,但 use 都能够用,祥见下一篇文章
    app.get('/home', (req, res) => {res.send("第一个页面")
    })
    // 在创立实现之后须要映射到一个端口下来发挥作用
    app.listen(3000)
    // 表明一下程序曾经运行了
    console.log('运行完结');

根底性能

 如果只用根本的创立服务器那真的太节约 express 了,它还包含很多简单的性能 

中间件

        // 在回调函数外面退出 next,在最初一行指定指标
        app.get('/home', (req, res, next) => {console.log('跳转到下一路由');
            next();})
        // 下一路由地址放弃雷同
        app.get('/home',(req,res)=>{res.send('跳转路由实现')
        })
        // 或者应用 use 来承受所有信息,路由为空示意接管全副
        app.use((req,res)=>{res.send('跳转路由实现')
        })

中间件之拦挡

        // 如果网站正在保护,则能够拦挡所有申请
        app.use((req,res)=>{res.send('网站正在保护')
        })
        
        // 如果是产生谬误则进行拦挡
        app.get('/index', (req, res) => {throw new Error('程序产生谬误');
        })
        // 用 use 接管所有错误信息,这里必须要填 next
        app.use((err, req, res, next) => {
            // 因为用的框架,所以状态码就算遇到谬误也会是 200,这里设置成 500
            res.status(500).send(err.message);
        })

拦挡异步谬误

// 引入异步模块
        const promisify = require('util').promisify
        // 引入读写模块
        const fs = require('fs')
        // 让读写模块异步
        const readFile = promisify(fs.readFile)
app.get('/index', async(req, res,next) => {
            try {
                // 轻易设置门路让程序抛出谬误
                await readFile('不存在.txt')
            } catch (err) {next(err)
            }
        })
        app.use((err, req, res, next) => {res.send(err)
        })

路由模块化

    在 express 中能够通过内置构造函数 router 生成二级路由
    
// 创立路由对象
        const home=express.Router();
        // 用 use 指向子路由
        app.use('/home',home)
        // 子路由地址为 /index
        home.get('/index',(req,res)=>{res.send('子路由模块')
        })
    
    在理论开发过程中个别会把两个路由写在不同的文件外面
    在主路由外面引入并进行门路匹配 

index.js:

const home=require('./home.js')
        app.use('/home',home)

home.js:

const express = require('express');
        const home = express.Router();
        
        home.get('/index', (req, res) => {res.send("欢送来到主页")
        });
     module.exports = home
退出移动版