Node.js-Express

作者: baiying | 来源:发表于2017-04-14 21:07 被阅读102次

    Express是这么定义自己的:一个轻量灵活的Node.js web 应用框架。

    启动服务器

    使用原Node.js中的http模块

    const http = require("http");
    http.createServer( (req,res)=> {
        res.end("hello");  //浏览器打开localhost:3000会看到hello
    }).listen(3000, ()=> {
        console.log("3000");  //提示信息,可以忽略
    });
    

    使用Express框架

    let express  = require("express")
    let app = new express();
    app.get('/',(req,res)=>{
        res.send("world");
    })
    app.listen(3000,()=>{
        console.log("listining 3000 port");
    })
    

    其实调用express()生成的app是一个函数,是作为了http中createServer的参数,调用app.listen()其实执行的是http.createServer(app).listen()。

    Express核心之中间件(middleware)

    • Express的官方文档有一句话说Express的本质其实是一系列中间件的调用,中间件其实就是函数。
    //普通中间件形式:
    function middlewareName(req, res, next) {
    // do something
    }
    //错误处理中间件形式
    function middlewareName(err, req, res, next) {
    // do something
    }
    

    函数中的res和req分别指请求的response和request,err指错误信息,next本身也是一个函数,调用next()就会执行下一个中间件。

    • 中间件分为注册中间件和路由中间件
    • 注册中间件:通常用app.use()方法
    • 路由中间件通常用app.Method()方法,
    app.use('/user', function(req, res, next) {
    // do something
    });
    app.get('/user', function(req, res, next) {
    // do something  //get方法可以用post,put,delete等替代
    });
    

    Express router

    router也是express中很重要的一个东西,简单来说它是一个中间件的容器,app的很多API,例如:app.use(),app.param(),app.handle()等,事实上都是对Router的API的一个简单包装。
    看下面的例子:

    let express  = require("express")
    let app = new express();
    let router  = express.Router();
    router.get("/hello",(req,res)=>{
        res.send("hello");   //浏览器中打开http://localhost:3000/router/hello会看到hello
    })
    router.get("/hi",(req,res)=>{
        res.send("hi")  //浏览器中打开http://localhost:3000/router/hi会看到hi
    })
    app.use("/router",router);
    app.listen(3000,()=>{
        console.log("listining 3000 port");
    })
    

    那么问题来了,前边我没有用router,直接实例化一个express对象app,然后去写中间件,不是照样可以完成请求响应么,我目前在找了很多资料后是这样理解的,一般我们会用app.use()去定义应用程序级的根路由,router.Method()去定义子路由,多个子路由都是以那个根路由为开始的。

    相关文章

      网友评论

        本文标题:Node.js-Express

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