手记

【九月打卡】第3天 Node.js工程师学习笔记

课程章节: Node 原生实战篇 - 项目基建 - 原生Node 开发Web 服务器

课程讲师: 北瑶

课程内容:

Node原生开发Web服务器
  1. 使用 Node.js 创建一个 HTTP 的服务器, 并能够接收到客户端发来的请求
  2. 获取到客户端具体的请求数据, 并根据不同的请求数据进行处理
  3. 将处理之后的结果, 响应会客户端, 并断开本次连接
使用Node.js创建HTTP服务器
// 引入http模块
var http = require('http');
// 创建服务器
var serve = http.createServer();
// 监听服务器端口
serve.listen(8000, function () {
  console.log('http://127.0.0.1:8000')
})
// 请求处理函数function(形参1,形参2){}
// 形参1:request请求对象 获取到当前请求的路径,方法等本次请求的所有信息
// 形参2:response响应对象 发送响应数据
server.on('request', function(request, response) {
    console.log('服务端收到客户端的请求啦!!!');
    // 向客户端页面返回字符串
    response.write("hello node");
    // 结束响应
    response.end();
});
服务器数据响应类型处理
  • 乱码问题
    因为我们的服务器接受请求处理并响应数据时,并没有指定响应数据的类型,所以出现了乱码;为了解决这个问题, 提供了setHeader方法
server.on('request', function(request, response) {
    // 设置响应头
    response.setHeader('Content-Type','text/plain;charset=utf-8'); // 设置数据类型及字符集
    // 向客户端页面返回字符串
    response.write("赟赟");
    // 结束响应
    response.end();
});

html 解析问题

    // 设置响应头
    response.setHeader('Content-Type','text/html;charset=utf-8'); // 设置数据类型及字符集

但是我们不能一直将 html 代码写到服务器的方法中, 而是需要建一个 xx.html 文件, 将 html 文件中的内容返回给客户端

var http = require('http');
// 引入文件操作模块
var fs = require('fs');
var server = http.createServer();
server.on('request', function(request, response) {
    // 读取html文件中的内容
    fs.readFile('./xx.html','utf8',function(error,html_data){
        // 设置响应头
        response.setHeader('Content-Type', 'text/html;charset=utf-8');
        // 将html中的内容响应回客户端,结束响应
        response.end(html_data);
    })
});

响应图片等其他静态资源

server.on('request', function(request, response) {
    // url 属性返回请求的URL字符串
    var urls = request.url;
    if( urls =='/'){
        fs.readFile('./xxx.html','utf8',function(error,html_data){
            // 设置响应头
            response.setHeader('Content-Type', 'text/html;charset=utf-8');
            // 将html中的内容响应回客户端,结束响应
            response.end(html_data);
        })
    }else if(urls.indexOf('jpg') != -1){ // 判断请求图片
        fs.readFile('./xx.jpg',function(error,html_data){
            response.end(html_data);
        })
    }
}
HTTP的不同请求方式处理

http.ServerRequest 并没有一个属性内容为请求体,原因是等待请求体传输可能是一件耗时的工作,譬如上传文件。而很多时候我们可能并不需要理会请求体的内容,恶意的 POST 请求会大大消耗服务器的资源。所以 Node.js 默认是不会解析请求体的,当我们需要的时候,只能手动来做。

获取请求类型

var url = require('url');
// 接收客户端向服务器发送的请求
serve.on('request', function (req, res) {
  console.log('服务端收到客户端的请求啦')
  // 获取请求类型
  var method = req.method;
  if (method == 'GET') {
    url_obj = url.parse(req.url, true); // 解析get请求
    console.log(url_obj.query);
    console.log(url_obj.pathname);
  } else if (method == 'POST') {
  // 为了支持各种可能的 HTTP 应用,Node.js 的 HTTP API 是非常底层的。 它只涉及流处理与消息解析。 它把一个消息解析成消息头和消息主体,但不解析具体的消息头或消息主体。
    var data = '';
    // net 模块中的 net.Socket 提供的data及end事件 
    req.on('data', function (d) {
      data += d;
      console.log(data);
    })
    // 绑定end事件,监听数据接受完成
    req.on('end', function () {
      console.log(require('querystring').parse(data))
    })
  }
})

学习心得

通过本章的学习, 对前后端交互有的大致的了解

课程截图

0人推荐
随时随地看视频
慕课网APP