一个用“Hello, World”做响应的HTTP服务器
var http = require('http')
var server = http.creareServer(function (req,res){
res.write('hello,world')
res.end()
})
res.write()和res.end()可以合成一条语句:res.end("Hello, world")
然后绑定一个端口,让服务器可以监听接入的请求。用到server.listen()方法,它能接受一个参数组合
server.listen(3000)
让node监听了端口3000,可以在浏览器中访问http://localhost:3000。就能看到Hello,world的普通文本页面。
读取请求头及设定响应头
Node提供了几个修改HTTP响应头的方法:
1、res.setHeader(field, value)
2、res.getHeader(field, value)
3、res.removeHeader(field, value)
设定HTTP响应码:res.statusCode()
资源
当Node的HTTP解析器读入并解析请求数据时,它会将数据做成data事件的形式,把解析好的数据放入其中,等待程序处理
req.on('data', function(chunk){
console.log('parsed', chunk)
res.end()
})
默认情况下,data事件会提供Buffer对象,这是node版的字节数组。而对于文本格式的代办事项而言,并不需要二进制数据,所以最好将流编码设定为ascill或utf-8。可以调用req.setEncoding(encoding)方法设定
设定Content-Length头
为了提高速度,如果可能的话,应该在响应中带着Content-Length域一起发送。对于事项清单而言,响应主体很容易在内存中提前构建好,所以能得到字符串的长度并一次性地将整个清单发出去。设定Content-Length域会隐含禁用Node的块编码,因为要传输的数据更少,所以能提高性能。
res.serHeader('Content-Length': Buffer.byteLength(body))
解析客户端请求的URL
Node提供了url模块,特别是.parse()函数。
request('url').parse('http://localhost:3000/1?api-key=foobar')
{ protocol: 'http',
slashes: true,
host: 'localhost: 3000',
port: '3000',
hostname: 'localhost',
href: 'http://localhost:3000/1?api-key=foobar',
search: '?api-key=foobar',
query: 'api-key=foobar',
pathname: '/1',
path: '/1?api-key=foobar'
}