Node.js中的http核心模块

_node中http核心模块

使用Node中http核心模块来构建一个Web服务器(四步法)

Node中专门提供了一个核心模块:http
http:创建编写服务器的

1.加载http核心模块

var http = require('http')

2.使用http.createServer()方法创建一个web服务器
返回一个Server实例

var server = http.createServer()

3.服务器干什么//提供服务(对数据的服务)

发请求
接收请求
处理请求
给个反馈(发送响应)

注册request请求事件
当客户端请求过来就会自动触发服务器的request请求事件//然后执行第二个参数:回调函数

server.on('request', function () {
  console.log('收到客户端的请求了');
})

4.绑定端口号,启动服务器

server.listen(3000, function () {
  console.log('服务器启动成功了');
})

image-20210203211048752

image-20210203211356052

image-20210203211403941

但是网页会一直转圈圈,因为没有得到响应,浏览器一直在等待

使用ctrl+c来关闭服务器,输入主机号+端口号后没有响应(找不到页面)

发送响应

1.建立服务器
var http = require('http')
var server = http.createServer()
server.on('request', function () {
  console.log('收到客户端的请求了');
})
server.listen(3000, function () {
  console.log('服务器启动成功了,可以访问127.0.0.1:3000');
})

request 请求事件处理函数,需要接收两个参数:Request请求对象和Response响应对象

2.Request请求对象

请求对象可以用来获取客户端的一些请求信息,例如请求路径,每次有请求时都会触发,端口号后的字符串怎么改变都会触发这个事件

​ 2.1 request.url 获取端口号后面的字符串

​ 2.2 request.socket.remotePort 获取访问服务器的远程端口

​ 2.3 request.socket.remoteAddress 获取访问服务器的远程ip地址

var http = require('http')
var server = http.createServer()
server.on('request', function (request, response) {
  console.log(request.url);
  console.log(request.socket.remotePort);
  console.log(request.socket.remoteAddress);
})
server.listen(3000, function () {
  console.log('Server is Running');
})

image-20210206212304991

3.Response响应对象

响应对象可以用来给客户端发送响应消息

3.1 response.write()和 response.end()

response.write()可以用来给客户端发送响应数据
write可以使用多次但是最后一定要用end结束响应否则客户端会一直等待

server.on('request', function (request,response) {
    response.write('hello')
    response.write('NodeJs')
    response.end()
})

也可以省略write直接用 response.end()来给客户端发送响应数据

server.on('request', function (request,response) {
    response.end('helloNodeJs')
})

image-20210203212816044

注意:

1.页面中文乱码,服务器发送请求时先发送编码格式utf-8确保中文可以正常显示

response.write('<head><meta charset="utf-8"/></head>');

2.数组或对象要使用JSON.stringify转换成字符串
JSON.stringify()Json转字符串, JSON.parse()字符串转Json

res.end(JSON.stringify(product))
3.2 response.setHeader()

设置响应头 name:字符串,value:值

​ 3.2.1 Content-Type

​ https://tool.oschina.net/commons
​ 不同资源对应Content-Type不一样
​ 图片不需要指定编码,一般只有字符数据才指定编码

//用来解决中文文本编译解析乱码
res.setHeader('Content-Type', 'text/plain;charset=utf-8')
//图片不需要指定编码
res.setHeader('Content-Type', 'image/jpeg')

​ 3.2.1 Loction

//在响应头中通过Location告诉客户端往哪重定向
//如果可无端发现收到服务器的响应的状态码是302就会自动取响应头中找Location
res.setHeader('Location', 'req.url')

在浏览器中输入 http://127.0.0.1:3000终端会打印出 收到客户端的请求了,请求路径是/
在浏览其中输入 http://127.0.0.1:3000/a终端会打印出 收到客户端的请求了,请求路径是/a

3.3 response.statusCode属性

​ https://www.baidu.com/link?url=xSGpjD1MDJhpa3bi5UW1E0344fm_UUk3rQYyZcMK-PJ90U4kQvs_GSeYymrawZWRkM4_DFHQp-lgKKXpakV9Kq&wd=&eqid=f2e61e1e00265d1e00000003601e9cd9

​ HTTP响应代码

res.statusCode = 302

简写

var http = require('http')
http
  .createServer('request', function (req, res) {
	
  })
  .listen(3000, function () {
    console.log('Server is Running');
  })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值