-
Notifications
You must be signed in to change notification settings - Fork 213
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Node.js 入门系列] http 模块 #26
Labels
Comments
This was referenced Dec 20, 2019
const http = require('http')
class MyServer {
constructor() {
this.list = []
this.server = null
}
on(route, callback) {
this.list.push({ route, callback })
}
enhanceResponse(res) {
res.json = obj => {
res.setHeader('Content-Type', 'application/json')
res.write(JSON.stringify(obj))
}
}
start() {
this.server = http.createServer((req, res) => {
if (req.url === '/favicon') return
const target = this.list.find(item => item.route === req.url)
if (target) {
this.enhanceResponse(res)
target.callback && target.callback(req, res)
res.end()
return
}
res.end('404')
})
this.server.listen(5000, () => console.log('The serve is running at http://localhost:5000'))
}
}
const server = new MyServer()
server.on('/hello', (_, res) => res.write('hello'))
server.on('/hello/json', (_, res) => res.json({ msg: 'hello' }))
server.start() 这节挺有趣,看了模仿着也写了个服务(^▽^)... |
1 similar comment
const http = require('http')
class MyServer {
constructor() {
this.list = []
this.server = null
}
on(route, callback) {
this.list.push({ route, callback })
}
enhanceResponse(res) {
res.json = obj => {
res.setHeader('Content-Type', 'application/json')
res.write(JSON.stringify(obj))
}
}
start() {
this.server = http.createServer((req, res) => {
if (req.url === '/favicon') return
const target = this.list.find(item => item.route === req.url)
if (target) {
this.enhanceResponse(res)
target.callback && target.callback(req, res)
res.end()
return
}
res.end('404')
})
this.server.listen(5000, () => console.log('The serve is running at http://localhost:5000'))
}
}
const server = new MyServer()
server.on('/hello', (_, res) => res.write('hello'))
server.on('/hello/json', (_, res) => res.json({ msg: 'hello' }))
server.start() 这节挺有趣,看了模仿着也写了个服务(^▽^)... |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
http 模块
http.IncomingMessage 对象
IncomingMessage 对象是由 http.Server 或 http.ClientRequest 创建的,并作为第一参数分别传递给 http.Server 的'request'事件和 http.ClientRequest 的'response'事件。
它也可以用来访问应答的状态、头文件和数据等。 IncomingMessage 对象实现了 Readable Stream 接口,对象中还有一些事件,方法和属性。
在 http.Server 或 http.ClientRequest 中略有不同。
http.createServer([requestListener])创建 HTTP 服务器
实现 HTTP 服务端功能,要通过 http.createServer 方法创建一个服务端对象 http.Server。
这个方法接收一个可选传入参数 requestListener,该参数是一个函数,传入后将做为 http.Server 的 request 事件监听。不传入时,则需要通过在 http.Server 对象的 request 事件中单独添加。
http.Server 服务器对象
http.Server 对象是一个事件发射器 EventEmitter,会发射:request、connection、close、checkContinue、connect、upgrade、clientError 事件。
其中 request 事件监听函数为 function (request, response) { },该方法有两个参数:request 是一个 http.IncomingMessage 实例,response 是一个 http.ServerResponse 实例。
http.Server 对象中还有一些方法,调用 server.listen 后 http.Server 就可以接收客户端传入连接。
http.ServerResponse
http.ServerResponse 对象用于响应处理客户端请求。
http.ServerResponse 是 HTTP 服务器(http.Server)内部创建的对象,作为第二个参数传递给 'request'事件的监听函数。
http.ServerResponse 实现了 Writable Stream 接口,其对于客户端的响应,本质上是对这个可写流的操作。它还是一个 EventEmitter,包含:close、finish 事件。
创建一个 http.Server
创建 http.Server 使用 http.createServer()方法,为了处理客户端请求,需要在服务端监听来自客户的'request'事件。
'request'事件的回调函数中,会返回一个 http.IncomingMessage 实例和一个 http.ServerResponse。
http.ServerResponse 实例是一个可写流,所以可以将一个文件流转接到 res 响应流中。下面示例就是将一张图片流传送到 HTTP 响应中:
上一节: [Node.js 入门系列] 全局对象 process 进程
下一节: [Node.js 入门系列] 统一资源定位符 url 模块
The text was updated successfully, but these errors were encountered: