持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情
HTTP模块是Node的核心模块,提供了一些网络传输的API,API位于比较底层的位置,开发中我们可以用这些API控制HTTP传输过程。Node定义了一些顶级的类、属性以及方法供我们使用
创建HTTP服务器
我们通过createServer方法创建HTTP服务器 当浏览器访问localhost:3000时,Node返回“Hello Node”字符串。
var http = require ( "http" )
var server = http.createServer (function (req, res){
res.writeHead (200,{ 'content-Type' : 'text/plain ' } ) ;
res.end ( "Hello Node ! " )
} ) ;
server.listen(3000)
我们开启了一个简单的HTTP服务器并且返回了一个server实例,俩个参数req,res分别代表我们平时请求的request和回调的response,server创建之后,我们通过listen来监听一个端口。服务器创建完成后,Node进程开始循环监听3000端口
var http = require ( "http" )
var server = http.createServer (function (req, res){
res.writeHead (200,{ 'content-Type' : 'text/plain ' } ) ;
res.end ( "Hello Node ! " )
} ) ;
server.on ( "connection" ,function (req,res){
console.log('connected');
})
server.on ( "request" ,function (req,res){
console.log('request');
})
server.listen(3000)
开发中我们需要判断服务器的一些基本活动情况,我们可以通过on来对server增加监听时间,现在以监听连接服务和请求为例子,当我们访问3000端口的时候,我们的控制台会打印出连接的状态
connected表示连接成功,request表示请求,这里有俩次request是因为我们需要获取到页面的favicon资源,所以也需要一次请求。
创建一个简单的服务器
var http = require ( "http" )
var fs = require ( "fs" )
var server = http.createServer (function (req, res){
// res.writeHead (200,{ 'content-Type' : 'text/plain ' } ) ;
// res.end ( "Hello Node ! " )
if(req.url=='/'){
let fileList =fs.readdirSync("./");
res.writeHead (200,{'Content-type': 'text/plain'} ) ;
res.end(fileList.toString("utf-8"))
}else{
let path = req.url
fs.readFile("."+path,function(err,data){
if(err){
res.end("err")
// throw err
}
res.writeHead(200,{"Content-type":"text/plain"})
res.end(data.toString("utf-8"))
})
}
} ) ;
server.listen(3000)
console.log('3000');
通过一个小实例我们就可以访问到我们的目录下面的所有文件了,其实我们这里访问的路径是localhost:3000/,所以进入的是第一个判断,第二个判断fs.readFile("."+path,function(err,data)用"."的原因是避免在linnux下面访问到根目录
The chunk argument must be of type string or an instance of Buffer or Uint8Array
然后开发的时候出现了一个报错,这里是由于发送的res.end必须是字符串导致的,所以res.end(fileList.toString("utf-8"))这些一定要打对才行
处理HTTP请求
获取方法
req.method
对于HTTP请求来说,method的值get和post最常见,我们通过req.method来进行获取
获取请求头
let headers = req.headers
let userAgent = headers['user-agent']