node.js 二

一、node创建web服务器

  1、引入系统模块,用于创建网络服务器的模块

  const http = require(' http ');

  2、创建网络服务器对象

  const app = http.createServer();

  3、当客户端有请求来的时候

  app.on(' request ', (req, res) =>{

    //响应

    res.end(' <h1>hellow</h1> ');

  })

  4、监听端口,习惯性监听3000端口,别的端口也行

  app.listen(3000);

  console.log('服务器已启动,监听3000端口,请访问localhost:3000 ');

二、req 和 res 的一些方法和属性

  1、req.url  :  获取请求地址

  

     默认是 ' / ' 

  2、req.headers :  获取请求报文的信息

   3、req.method :  获取请求的方法

  4、设置http状态码

    

     res.writeHead() ——> 默认不写是200,

    res.writeHead( 400 ) ——> 设置状态码为400

  5、writeHead()方法有两个参数,参数一是设置响应状态码,参数二是一个对象,用来设置响应头数据

    如:res.writeHead(200, {

        'Content-Type' : ' text/plain ' 

      })

    //  content-type是响应类型,text / plain 表示为纯文本,默认值

  文本的类型有:

    

   6、设置字符集编码,默认中文在浏览器会显示乱码

    res.writeHead(200, {

      'Content-Type' : ' text/html;charset=utf8 '

    })

    // 设置了响应类型为html类型,字符集编码为utf-8

 三、http请求与响应处理

  客户端向服务端发送请求时,有时候需要带一些参数,那node如何获取这些参数呢?

  1、GET请求

  请求参数被放置在浏览器的地址栏中,例如:http://localhost:3000/?name=zhangsan&age=30

  获取get发送的参数需要借助系统模块url,url模块可以用来处理url地址

  (1)//导入url系统模块用于处理url地址

      const url = require(' url ');

     //url有个parse方法可以解析url地址, 先在node里面打印出看看

     app.on(' request ', (req, res)=>{

        console.log( url.parse( req.url ) );

      })

   输入的地址 : 

    

   node里的打印结果

    

   可以看到返回的是一个对象,属性query里面是 ? 后面的参数,也就是get传进去的参数,

  pathname是访问的地址

 (2)、但是获得的参数是字符串形式,想要得到对象形式的参数又该怎么办呢??

   其实url.parse() 还有第二个参数,设置为true, query里面的值会转换成对象形式显示

    url.parse( req.url, true );

    

   此时我们就可以获取到传入的参数了

  let { name, age } = url.parse( req.url, true ).query;

  2、POST请求

  请求参数被放置在请求体中进行传输

  获取POST请求需要用到data事件和end事件

  (1)建立一个html文件,在里面写个form表单来发送post请求

    <form action="http://localhost:3000" method="post">
        <input type="text" name="username">
        <input type="text" name="password">
        <input type="submit" value="请求">
    </form>

  

    const http = require('http');
    // const querystring = require('querystring');
    const app = http.createServer();

    app.on('request', (req, res)=>{
        // 创建一个用来存放post参数的变量,因为Post参数是一点一点传的,不是一下子全部传进去
        let postparams = '';
        // 监听参数传输事件, 第二个参数是回调函数, 参数为post传入的参数
        req.on('data', params =>  postparams += params);
        // 监听参数传输完毕事件
        req.on('end', ()=> {
            //console.log(querystring.parse(postparams));
// 参数传入结束后,打印传入的post参数 console.log(postparams); })
     // 必须返回一个响应结果,不然会页面会一直在处理中的状态 res.end('ok'); }) app.listen(3000);

  在node中打印出传入的post参数

  

  (2)、打印出来又是一个字符串,那怎么才能把它转为对象格式呢 ???

    node提供了一个内置系统模块querystring,专门用于将http参数转为对象格式

    const querystring = require(' querystring ');

    querystring.parse(' http的参数 ')

    在参数传输完毕后,console.log( querystring.parse( postparams ) );

  

 

 

  

 

 

  

 

posted @ 2020-07-22 17:27  书爱  阅读(163)  评论(0编辑  收藏  举报