【1】认识NodeJS

1、什么是NodeJS?

  大家都知道,JavaScript是运行在浏览器上的脚本语言,简称JS,代码由浏览器解释后执行。JS不能脱离浏览器运行在服务器上,但NodeJS把JS的战场从浏览器转移到服务器,从而可以进行更多的操作,也就是说NodeJS实现了使用JS来开发后端。

  JS之所以能在浏览器上运行,是因为浏览器的V8引擎可以将JavaScript代码编译成机器代码。而 Node是V8引擎的容器,可以直接运行在电脑上,所以借助于NodeJS,JS代码就可以翻译成机器语言被计算机所识别了。

  借助Node运行JS代码:

  

  Node.js官方下载地址:https://nodejs.org/en/

  使用 node -v 查看版本号:

       

 2、HTTP请求

  既然NodeJS可以充当Web服务器,而Web服务器的主要任务就是处理HTTP请求,所以先来认识一下HTTP请求。HTTP请求,一般会经历以下三个步骤:

  • DNS解析,建立TCP连接,然后发起HTTP请求;

  例如,访问百度的时候,首先通过域名解析出远程服务器的IP地址:

        

   之后,就会建立TCP连接,也就是三次握手,进而发起HTTP请求,图中请求方法是GET。

  • 服务端接收到HTTP请求,进行处理,返回数据;

  Response包含响应头,和响应的正文内容,返回给客户端:

  

  • 客户端收到返回的数据,进行处理(例如渲染界面)。

  客户端收到HTML代码后,就会进行解析,当需要一些图片、样式内容时,同样也会发起额外的请求。

3、GET请求

  1. 引入 required 模块:我们可以使用 require 指令来载入 Node.js 模块。

  2. 创建服务器:服务器可以监听客户端的请求,类似于 Apache 、Nginx 等 HTTP 服务器。

  3. 接收请求与响应请求 服务器很容易创建,客户端可以使用浏览器或终端发送 HTTP 请求,服务器接收请求后返回响应数据。

//使用 require 指令来载入 http 模块
var http = require("http")
var url_R = require("url")
//使用 http.createServer() 方法创建服务器,函数通过 req, res 参数来接收和响应数据
const server = http.createServer(function(req, res){
    res.setHeader('Content-Type', 'text/html;charset=utf-8')
    //打印请求方法
    const method = req.method
    console.log('method:', method)
    //打印请求url
    const url = req.url
    console.log('url:', url)
    //解析URL参数
    var params = url_R.parse(url, true).query
    res.write('网站名:' + params.name)
    res.write('\n')
    res.write('网站URL:' + params.url)
    //发送响应数据
    res.end()
})
//使用 listen 方法绑定 5000 端口
server.listen(5000,() => {
    console.log('server running at port 5000')
})

运行:

在浏览器中访问 http://localhost:5000/user?name=菜鸟教程&url=www.runoob.com 然后查看返回结果:

4、POST请求

//使用 require 指令来载入 http 模块
var http = require("http")
var url_R = require("url")
var querystring = require('querystring')

var postHTML = 
  '<html><head><meta charset="utf-8"><title>菜鸟教程 Node.js 实例</title></head>' +
  '<body>' +
  '<form method="post">' +
  '网站名: <input name="name"><br>' +
  '网站 URL: <input name="url"><br>' +
  '<input type="submit">' +
  '</form>' +
  '</body></html>';

//使用 http.createServer() 方法创建服务器,函数通过 req, res 参数来接收和响应数据
const server = http.createServer(function(req, res){
    // 定义了一个body变量,用于暂存请求体的信息
    var body = '';
    // 通过req的data事件监听函数,每当接受到请求体的数据,就累加到body变量中
    req.on('data', function(chunk){
        body += chunk;
    })
    // 在end事件触发后,通过querystring.parse将body解析为真正的POST请求格式,然后向客户端返回。
    req.on('end', function(){
        //解析参数
        body = querystring.parse(body);
        console.log('>>> body:', body)
        //设置响应头部信息及编码
        res.setHeader('Content-Type', 'text/html;charset=utf-8')
        if (body.name && body.url){
            //输出提交的数据
            res.write('网站名:' + body.name)
            res.write('<br>')
            res.write('网站URL:' + body.url)
        }else{
            //输出表单
            res.write(postHTML)
        }
        res.end()
    })
})
//使用 listen 方法绑定 5000 端口
server.listen(5000,() => {
    console.log('server running at port 5000')
})

在浏览器中访问 http://localhost:5000 查看运行结果。

参考:https://www.runoob.com/nodejs/node-js-get-post.html

posted @ 2022-12-09 10:30  闪亮可可仙  阅读(60)  评论(0编辑  收藏  举报