头图

对于express框架的基本理解

lbzz
引言

*因为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
阅读 202

人们感到痛苦的不是她们用笑声替代思考,而是他们不知道自己为什么要笑,以及为什么不在思考。

1 声望
0 粉丝
0 条评论
你知道吗?

人们感到痛苦的不是她们用笑声替代思考,而是他们不知道自己为什么要笑,以及为什么不在思考。

1 声望
0 粉丝
宣传栏