Published on

关于 connect 和 express 的学习笔记

Authors
  • avatar
    Name
    Arvin Wei
    Twitter

Http

HTTP 设计的哲学

            -> Request  ->
    Client                  Server
            <- Response <-

HTTP 协议

Request 格式

    <method> <request-URL> <version> <headers>

    <entity-body>

Response 格式

    <version> <status> <reason-phrase> <headers>

    <entity-body>

node http 模块

node 提供的 http 模块是如何实现 Http Server 的

官方的经典例子:

var http = require('http')
http
  .createServer(function (req, res) {
    res.writeHead(200, { 'Content-Type': 'text/plain' })
    res.end('Hello World\n')
  })
  .listen(1337, '127.0.0.1')
console.log('Server running at http://127.0.0.1:1337/')

Connect

urlencoded

处理表单提交的数据

var app = connect().use(connect.urlencoded())

Request Headers 包括下面的一条头信息

Content-Type:application/x-www-form-urlencoded

methodOverride

重写 http request method

req.method = req.headers['x-http-method-override']

Express

Express 基于 Connect 构建,为我们提供了什么?

  • http 请求方法封装
  • url 路由

http 请求如何导向到 Express 提供的方法

Express 在哪里定义诸如 get, post, put, delete 这些方法的呢?JS 的灵活性提供给开发者动态创建方法的能力。这些 http 协议定义的方法,位于名字叫做 methods 的 node 的第三方模块中,这个模块定义了 http 中常用以及不常用的方法,Express 正是使用这个集合,动态地创建了相同名字的方法。

具体实现方式,可查阅 Express 的源码,实现代码位于 ./lib/application.js

app.get -> router.get -> router.route