_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('服务器启动成功了');
})
但是网页会一直转圈圈,因为没有得到响应,浏览器一直在等待
使用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');
})
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')
})
注意:
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');
})