美文网首页
nidejs基础知识及服务器搭建。纯干货。抓紧收藏

nidejs基础知识及服务器搭建。纯干货。抓紧收藏

作者: newTmorrow | 来源:发表于2018-07-10 07:58 被阅读0次
    nidejs基础知识及服务器搭建。纯干货。抓紧收藏

    今天学习的内容

    1:复习昨天重点

    2:大鱼喂小鱼;首页

      大鱼喂小鱼:

      大鱼碰撞小鱼,小鱼吃饱,小鱼身体图片下标 = 0

      碰撞检测: collsion.js 大鱼碰撞食物;

    3:今天的目标

      3.1:nodejs 模块

      遇到问题:nodejs 作者nodejs 不足

      (1)生活示例:实用主义;完美主义

      (2)招聘条件:50% >公司(技术型,互联网公司)

      3.2:下载配置

      https://npm.taobao.org/mirrors/node

      node-v9.9.0-x64.msi  64位windows版本

      node-v9.9.0-x86.msi  32位windows版本

      node-v9.9.0.pkg      mac

      3.3:阿里面试题:用户在在浏览器输入 www.taobao.com直到

        看到网页发生了什么?

        (1)操作系访问网络的DNS服务器,把域名转ip地址

        (2)浏览器使用IP地址向淘宝发请求

        (3)淘宝服务器接收请求,并解析请求内容,查询找资源,

          可能数据库,构建并返回HTTP响应消息

        (4)浏览器接收并解析响应消息

        (5)浏览器缓存接收响应内容,并解析和渲染内容

     

      3.4:静态网页和动态网页

      静态:网页内容任何人任何时间访问都是不变的..

            HTML/CSS/JS/Flash/视频音频

      动态:网页内容不同人在不同时间访问可能是不同的..

            DB/JSP/PHP/ASP/Node.JS

      JSP=html+java  功能强大可靠,适合大型企业项目(阿里;银行)

      2003-2004 淘宝[php+mysql];->mysql(oracle)->php->java->服务器

                ->小型机->oracle->{服务器+java+OC(mysql)}--卡车

      PHP=html+php  简单易用:适合互联网项目(论坛)  --家用轿

      https://cn.wordpress.org/

      ASP.NET=html+c#  易用;贵点

      Node.js=html+js  性能好--(跑车)

     

    node.js适合项目(io密集型) node.js 不适合项目(cpu密集型)

    输入输出[查询;添加] 滴滴打车;天气预报...

           

     

      3.5:Node.JS

      Node.js不是js,是一种运行在服务器端开发平台(开发语言用js),

      历史上第一次有一种语言可以通吃前后台.

      https://npm.taobao.org/mirrors/node  淘宝镜像

     

      3.6:Node.JS 运行模式

      (1)交互模式---一般测试

        输入一行代码执行一行

        在命令行状态下输入

        node 回车

        退出 ctrl+c  二次

      (2)脚本模式--正式项目中使用方式

        把要执行的所有语句编写在一个文本文件中(后缀名任意,没有也行),一次性提交node解析器执行

        node  x.js  回车

      解释器: C:\Program Files\nodejs\node.exe

      练习:02_node.js 打印出九九乘法表,

      以脚本模式在ws运行

      3.7:Node.JS 如何自学一门新语言--Node.js

      (1)了解背景

        --百度百科 Node.JS  [事件驱动,非阻塞I/O 模型]

      (2)搭建开发环境,编写Hello World

      (3)数据类型

       

    前端js数据类型

    1:原始[基本]    number;string;boolean;null;undefined

    2:引用/对象类型

        ES对象:Math;Date;RegExp;Object;Function;Error.....

        BOM/DOM对象:window;docuemnt;screen;event...

        自定义:{}

    后端Node.js 数据类型

    1:原始[基本]  number;string;boolean;null;undefined

    2:引用/对象类型

        ES对象:Math;Date;RegExp;Object;Function;Error.....

        自定义:{}

      (4)变量和常量

      node js 提供了10几万·个专用对象 

    运算符:逻辑运算·  算术运算  三目运算  位运算  副职运算  typeof  instanceof 

    逻辑结构:循环结构  while do while  for    for()  选择结构  if else  switch case

    声明一个保存五个学生的数学;

    7.通用小程序

      nodejs 模块

    modal模态框

    model模型

    module模块  是nodejs特有  是一个web项目中的功能分为不同的模块

    每一个模块都是一个独立的构造函数  解释器都会自动为js文件添加如下代码

      (function(exports,require,module,__filename,__dirname){

    expoirt{}用于声明向外部导出自己的成员  使用exports对象  对外导出或者公开自己的内部成员供其他成员使用 

    require:fn用于导入其他模块  并且创建制定模块对象  创建一个模块的实力  模块名称就是模块的文件名

    module:只带当前模块对象

    你写的代码 

    })

    导出

    const PI=Math.PI;

    function getSize(r){

      var size=2*PI*r;

      return size;

    }

    function getPerimeter(r){

        var p=PI*r*r;

        return p;

    }

    //exports.PI=PI;

    exports.getSize=getSize;

    exports.Perimeter=getPerimeter;

    导入

    var m=require("./circle");

    var c=m.getSize(2);

    console.log(c);

    var d=m.Perimeter(3);

    console.log(d);

     

    module指代当前对象

    exports和modeule.exports

    二者都可以用于指向外界导出自己的内部成员

    真正导出数据modelu.export

    node.js底层代码  exports=module.exports

    如果导出一个完整的对象只能是m e    只导出属性 函数或变量  对象只能用me导出 

    最好都用  module.exports     

    编写数组模块

    sum(),

    module.exports.sum=sum;

    module.exports.avg=avg;

    var m=require("./arr");

    !!!!!./必须要写  ./

    exports不能导出对象   

    3.8  nodejs 模块的分类

    三种:1.官方提供  require(“模块名称”)

      2.第三方模块;

    3.用户自定义的模块  nodule.exports  require()

    3.9

    day02

      通过nodejs搭建服务器

    1. 引入nodejs核心模块  http

    2. const http=require(“http”);

    3. 创建一个服务器实例

    4. let sever=http.createSever((req,res)=>{res.end(“it works.”);});

    nodejs的全局模块  global  她的使用不需要引入

    dirname  当前文件所在目录的绝对路径 

    全局对象console 

    全局对象  process    thread  线程执行的最小单位

    process.kill()结束某一个软件的运行 

    今天学习的内容

    1:复习昨天的内容

    2:首页

    3:今天的目标

      3.1:node.js  模块分类(自定义模块)

      (1)官方提供模块

      (2)第三方模块,单独下载 www.npmjs.com

      (3)自定义模块

        #文件模块: 创建一个js文件,如 m3.js 导出需要公开数据

                    其它模块 require("./m3");模块

        #目录模块:

          方式一:创建一个目录,假设名为 m4,其中创建名为index.js

                文件,导出需要公开的数据,其它模块引用

                require("./m4");

          方式二:创建一个目录,假设名为 m5,其中创建名为 5.js

                创建package.json main指定启动文件 5.js

          方式三:创建一个目录,必须名为 node_modules,

                其中再创建一个目录,假设 m6 ,其中创建

                package.json描述文件,其中声明main属性

                指定默认执行js文件,如 6.js ,其中导出需要

                公共数据,其它模块require("m6");

    练习:使用第三种方式,创建二个目录模块circle;rectangle

    都对外公开两个方法

    size()      返回指定图形面积

    perimeter();返回指定图形周长

    最后在最外层模块,引入上述两个模块

    circle.size(r) circle.perimeter(r)

    r.size(w,h);  r.perimeter(w,h);

    常见错误:

    1: Error: Cannot find module './m4'  目录结构错误

      3.2:node.js  --- 特性(事件驱动; 非阻塞IO)

        php    阻塞  IO {有顺序;效率差}

        nodejs 非阻塞IO{无序;效率高}

      3.3:node.js  npm (Node Package Mangaer)

        node.js的第三方模块/包管理器,可以用于下载;更新;删除;

        维护包依赖关系的工具

        npm 工具默认www.npmjs.com网站下载所需的第三方模块

        包

        使用npm工具下载一个新的软件包

        npm install  包名    下载

        npm uninstall 包名    删除

        示例:

        nodejs 下载nodejs mysql驱动程序(第三方模块)

        1:查找 mysql 模块      www.npmjs.com    [mysql]

        2:npm install mysql

        淘宝:开发工具 cnpm

        cnpm install mysql    [99.99%]

      3.3:node.js  官方模块

      querystring  请求http中的查询字符串  var obj=qs.parse(str);将查询字符串转换为js对象      qs.stringfy(obj)将对秀昂转换为 js的字符串

    eg:

    //用;来加载querystring模块  官方提供好的模块要用常量  只是使用  不修改

        //global buffer不用require  优先级别较高

    const qs=require("querystring");

    //2。创建字符串

    var str="uname=tom&ypwd=123&page=3";

    //3将字符串转换为js对象

    var obj=qs.parse(str);

    console.log(obj);

    //4对象=》字符串

    var obj1={ uname: 'hah', ypwd: '12j3', page: '39' };

    var str1 =qs.stringify(obj1);

    console.log(str1);

      3.3:node.js  官方模块

    url模块  用来解析一个http请求地址  获取其中各个不同部分

    var obj=url.parse(str);url转对象

    var obj=url.parse(str,true)将其中的查询字符串也转换为对象;

    egconst  url=require("url");

    var str="https://jd.com:443/ad/index?uname=hah&upwd=12345&page=50";

    var obj2=url.parse(str,true);

    console.log(obj2);

      3.3:node.js  官方模块

    buffer  缓冲区  内存是速度介于 硬盘和cpu之间  本质上是内存的一块区域  用于暂时存储  数据  该区域  叫做缓存区 

    1. 创建缓冲区  var buffer=Buffer.alloc(1024);

    2. 创建一个数字数组的缓冲区

    3.   var buffer1=Buffer.from([1,2,3,4])

    4.   创建一个字符串

    5. var buffer2=Buffer.from(“abc”)

    6. 缓冲区  将缓冲区转换为字符串 

    7. //创建  大小为2k的缓冲区  不用requier  优先级较高

        var buffer=Buffer.alloc(1024*2);

    console.log(buffer.length);

    //数组

      var buf1=Buffer.from([1,2,3,4]);

    console.log(buf1);

    //字符串

    var buf2=Buffer.from("abhsjsj");

    console.log(buf2);

    //字符串缓冲区 转换为字符串

    var str=buf2.toString();

    console.log(str);

    8. 

      3.3:node.js  官方模块

      文件读写模块  增删改查

    1. 阻塞方案  有顺序 效率低

    阻塞的向文件中  var data=fs.readFileSync(“文件名”);

    写内容  fs.writeFileSync(文件名,内容) ;先将原有的内容删除新内容

    //阻塞方式  读取文件  public/。。。。index.html  main.html

    //加载fs模块

    var fs=require("fs")

    //创建两个变量  保存名称

    var f1="./public/index.html";

    var f2="./public/main.html";

    console.log(1);

    //读取第一个

    var data=fs.readFileSync(f1);

    console.log(data);

    console.log(2);

    //第二个

    var data1=fs.readFileSync(f2);

    console.log(data1)

    文件写入用

    var fs=require("fs");

    //创建二个变量保存文件名 文件不存在自动创建  文件夹不存在就直接报错

    var f1="./public/1.log";

    var f2="./public/2.log";

    //写入文件

    console.log(1);

    fs.writeFileSync(f1,new Date().toString);

    console.log(2);

    fs.writeFileSync(f2,new Date().toString);

    console.log(3);

    copy文件:先读取写入

    var fs=require("fs");

    var f1="./public/3.css";

    var f2="./public/33.css";

    //创建二个变量保存文件名 文件不存在自动创建  文件夹不存在就直接报错

    var data=fs.readFileSync(f1);

    fs.writeFileSync(f2,data);

    console.log(data.toString());

    fs.appendFileSync(f2,data);

    文件中  追加内容  fs.appendFileSync(文件名 ,内容)

    2. 非阻塞方案  无顺序  效率高

    不好控制  fs.readFile(fileNmae,(err,data)=>{})  回掉函数文件读取之后  data就是内容  err是错误 

    var fs=require("fs");

    var f1="./public/3.css";

    console.log(1);

    fs.readFile(f1,(err,data)=>{

      if(err) throw err;

      console.log(data);

        console.log("读取结束");

    })

    console.log(2);

    console.log(3);

    console.log(4);

    回调函数参数的顺序不能变;

    写入fs.writeFile(文件名,(err)=>{

    })追加fs.appendFile(文件名,(err)=>{

    })

    var fs=require("fs");

    var f1="./public/4.css";

    var f2="./public/44.css";

    fs.readFile(f1,(err,data)=>{

        if(err) throw err;

        fs.writeFile(f2,data,(err)=>{if(err){throw err;}})

    })

    注意要在读取文件之中  处理写入文件   

    http模块    给予http协议客户端程序一  服务器程序;

    //创建服务器对象

    //创建服务器对象

    var http=require("http");

        var server=http.createServer();

    //绑定端口  端口  1-65535;四个6不行  8888可以

    server.listen(8888);

    //注册事件  客户端请求事件、 req请求对象  res响应对象

    server.on("request",(req,res)=>{

        console.log("nodejs服务器端接收到一个请求");

        //解析客户端发来的请求消息

        console.log(req.method);//请求方法

        console.log(req.url);//请求的url

        console.log(req.httpVersion);//http协议版本

        res.write("hello world");

        res.end();

    })

    //响应客户的消息    res.write()向客户端发送字符串  res.send()响应结束;

      作业1:大小小,小小大

      大鱼喂小鱼,金色光环特效,漂浮生物

    //1:加载http模块

    const http = require("http");

    const fs = require("fs");

    const url = require("url");

    //2:创建http服务器

    var server = http.createServer();

    //3:绑定监听端口

    server.listen(3000);

    //4:注册事件 request

    server.on("request",(req,res)=>{

        console.log("node.js 服务器端接收请请求");

        //解析客户端发来的请求消息

        //console.log(req.method); //GET POST

        //console.log(req.url);

        //console.log(req.httpVersion); //http协议

        var f=null;

        var obj = url.parse(req.url,true);

        if("/index.html" == obj.pathname){

          f="./index.html";

        }else if("/login.html" == obj.pathname){

            f="./login.html"

        }else {

          f="./404.html";

        }

        ///index.html

        //读取index.html文件内容返回给客户端

        fs.readFile(f,(err,data)=>{

            if(err)throw err;

            res.write(data);

            res.end();

        });

    });

    req 请求对象   

    res.setHeader("Content-Type","text/html;charset=UTF-8");//设置字符集编码 

    res.write("<h1>打飞机</h1>>");

    res.end()

    实现注册

    const http = require("http");

    const fs = require("fs");

    const url = require("url");

    //2:创建http服务器

    var server = http.createServer();

    //3:绑定监听端口

    server.listen(3000);

    //4:注册事件 request

    server.on("request",(req,res)=>{

        console.log(res.url);

        console.log("node.js 服务器端接收请请求");

        var obj = url.parse(req.url,true);

        var f=null;

        if("/reg.html" == obj.pathname){

            f="./reg.html";

            fs.readFile(f,(err,data)=>{

                if(err)throw err;

                res.setHeader("Content-Type","text/html;charset=UTF-8");

                res.write(data);

                res.end();

            });

        }else if("/reg.do" == obj.pathname){

            var f1="./login.log";

          fs.appendFile(f1,("uname="+obj.query.uname+" "),(err)=>{

                if(err)throw err;

            })

            fs.appendFile(f1,("upwd="+obj.query.upwd+" "),(err)=>{

                if(err)throw err;

                res.setHeader("Content-Type","text/html;charset=UTF-8");

                res.write("注册·完成");

                res.end();

            })

            console.log("a");

        }

        ///index.html

        //读取index.html文件内容返回给客户端

    });

    数据库的种类

    1. 关系型数据库

    mysql 单表500万 100列行 opracle sql server  mysql一秒25次 

    mogodb redis  20000以上 memcache  nosql 你不仅仅是sql

    redis高并发    HBASE  1000万列

    2. 非关系型的数据库

    3.

    sql语句的分类·

    DDL定义语言 create drop alert

    DML操作语句insert update、 delete

    DQL查询语句 select

    DCL 数据的控制语句 授权 恢复  回收权利 recover  grand‘ 

    Nodejs 访问·mysql的服务器

    :安装mysql‘的驱动程序

      为了精简nodejs的解释器  官方没有提供访问任何数据库相关的抹开I 必须要使用npm工具下载  npm。Js 

    三部  创建数据库连接 

    const mysql=require(“mysql:);

    var conn=mysql.createConnection({})

    3. 发送语句给哦数据库执行

    4. conn.query(“sql”,(err,result){})

    5. 关闭连接

    6. const mysql=require("mysql");

    var conn=mysql.createConnection({

        host:"127.0.0.1",

        user:"root",

        password:"",

        database:"xz",

        port:3306

    });

    console.log(conn);

    //加载mysql模块

    var sql="INSERT INTO xz_admin(uname,upwd) VALUES ('kk',md5('123'))";

    //创建sql语句  并发送

    conn.query(sql,(err,result)=>{

        if(err){throw err}

        console.log(result);

        conn.end();

    })

    7. 判定添加成功的条件

    8. if(result.affectedRows>0){

        console.log("添加成功");

    }

    mysql模块的使用  知道  网络中常见的攻击手段  sql注入  利用规则将危险代码  加入到sql语句里边 

    占位符技术解决问题 

    const mysql=require("mysql");

    var conn=mysql.createConnection({

        host:"127.0.0.1",

        user:"root",

        password:"",

        database:"xz",

        port:3306

    });

    var uname="dingding";

    var upwd=123456;

    //console.log(conn);

    //加载mysql模块

    var sql=`SELECT COUNT(uid) as c FROM xz_user WHERE uname=? AND upwd=?`;

    //var sql="INSERT INTO xz_admin(uname,upwd) VALUES ('xianghong',md5('66666'))";

    //创建sql语句  并发送

    conn.query(sql,[uname,upwd],(err,result)=>{

        if(err){throw err}

        console.log(result[0].c);

    if(result[0].c>0){

        console.log("成功");

    }

    else{

        console.log('失败');

    }

    })

    创建链接池

    const mysql=require("mysql");

    const http=require("http");

    const url=require("url");

    const fs=require("fs");

    var server = http.createServer();

    var pool=mysql.createPool({

        host:"127.0.0.1",

        user:"root",

        password:"",

        database:"tmooc",

        port:3306,

        connectionLimit:5

    });

    //3:绑定监听端口

    server.listen(3000);

    //4:注册事件 request

    server.on("request",(req,res)=>{

        res.setHeader("Content-Type", "text/html;charset=UTF-8");

        var obj=url.parse(req.url,true);

        var sname=obj.query.sname;

        var score=obj.query.score;

        var now=new Date();

        var path=obj.pathname;

        reg=/^[0-9a-z\u4e00-\u9fa5]{2,}$/i;

        if(path=="/add.do") {

            if (reg.test(sname) && reg.test(score)){

                var sql = "insert into stu values(null,?,?,?)";

            pool.query(sql, [sname, score, now], (err, result) => {

                if (err) {

                    throw err

                }

                console.log(result);

                if (result.affectedRows > 0) {

                    res.write("<h1>登记成功</h1>");

                    res.end();

                }

                else {

                    res.write("<h1>登记失败</h1>");

                    res.end();

                }

            })

        }

        else{

                res.write("<h1>数据格式有误 请检查!</h1>");

                res.end();

            }

        }

        else if(path=="/add.html"){

          fs.readFile("./add.html",(err,data)=>{

              if(err){throw err}

              res.write(data);

              res.end();

          })

        }

    })

      js将数组转换为  json字符串

    var json=JSON .stringfy(result)

    http开发效率有点低 

    第三方模块 express

    简化版本的http;

    如果使用官方的http模块  但是这个模快是一个非常底层的模块  推荐使用  http模块进一步封装的 简化模块 

    该模块的指甲哦顾问景象站http://www.expressjs.com.cn

    1. 记载模块

    2. var express=require(“express”)

    3. var app=express();

    4. 创建express对象

    5. var server=tttp.CreateServer(app);

    6. 创建服务器对象 

    7. server.listen (3000);

    8. 绑定监听端口 

    9. app.get(“/add.html”,(req,res)=>{

    10.   res.sendFile(“./add.html”);

    11. })

    nodejs  2.4

    请求方法:

    get请求  app.get  表示客户端想要获取服务器资源 

    post请求  app.post/delete/put  表示客户带要上传 添加文件给客户端  相关数据在请求主体中

    put更新指定的主体数据位于服务器上边 

    delete表示客户端想要删除服务器上边的数据 

    请求方法用于标明此次请求的目的 

    浏览器什么方法发送请求:

    get:地址栏中直接输入  ajax  表单提交  a标签  超链接 

      js的跳转  src  link-href 

    post:ajax  表单

    put:ajax

    delete:ajax 

    1.ie8  juery2以上不支持ie

    2.热部署  nodejs支持热部署 

    3.post POST    post尽量写大写 

    取参数:

    2.5参数 

    get请求: 两种方式

    1.查询字符串

    get/user?uid=3&loc=bj  app.get(/user",(req,res)=>{

        req.query.uid;

    query.loc

    })

    2.接受请求的参数 

    get/book/js/60  app.get("/book/:name/:price"

    req.params.name/price;

    })

    内部自动创建变量 一一对应 

    express自动创建属性

    res.json(result);

    发送json  sendFile  发送页面

    express实例

    const express=require("express");

    const http= require("http");

    var app=express();

    var server=http.createServer(app);

    server.listen(3000);

    const mysql = require("mysql");

    //5:�������ӳ�

    var pool = mysql.createPool({

        host:"127.0.0.1",

        user:"root",

        password:"",

        database:"tmooc",

        port:3306,

        connectionLimit:5

    });

    app.get("/stu/:sid",(req,res)=>{

      var sid= req.params.sid;

      //res.send(id);

    var sql = "SELECT * FROM stu where sid=? ";

    pool.query(sql,[sid],(err,result)=>{

        if(err)throw err;

    res.json(result);

    });

    })

    关于http协议:

    请求是客户端发送给服务器的  响应是服务器发送给客户端的

    发送一次请求  只会得到一次响应

    1. 请求的详细个事

    1. 请求起始行(请求方式:get没有请求主体 post有主体 put有主体  delete head表示客户端获取服务器上的资源只有响应头不要响应主体

    ,trace追踪请求路径  connection 测试连接  options保留以后使用

    2.请求头:1.host.www..tmooc.cn 客户端告诉服务器此次请求的虚拟主机 2.connection:keep-alive  持久链接  3.cache-control缓存  4.user-agent客户端告诉服务器自己是什么类型  5.每次请求都会带上cookie  请求主体的描述  content-length:36  请求字节 

    2响应其实行:

    今天学习的内容

    1:复习上一周重点;http协议

    2:今天的目标

      2.1:nodejs--express--项目(学子商城)

      nodeadmin

                public---保存所有静态网页资源(html;css;image)

                app.js--项目的入口程序

                pool.js-连接池

      node_modules/mysql+express

      2.2:用户管理

      2.3:用户列表

        (1)用户分页显示

          app.js

          GET /users?pno=3&pageSize=10

          #参数 pno pageSize

          #sql

            SELECT count(uid) as c FROM xz_user  总记录数

            SELECT uid,uname,email,phone, avatar, user_name

            FROM xz_user

            LIMIT ?,?

          #json

            {pno:3,pageSize:10;pageCount:5,data:[]}

        常见错误:

          1: Error: Cannot find module 'express'

          当前目录或上级目中node_modules/没有express

          node.js/day04/ node_modules{mysq;express}

          2:

        (2)删除指定用户

        (3)更新指定用户信息[密码]

        (4)详细

      2.4:用户检索

      return;

    ➡️错误时使用      阻止程序执行     

    非阻塞  设置progress来保证函数执行顺序

    静态资源的中间件

    app.user(express.static(“public”))  express

    实例

    http://127.0.0.12:3000/user_list.html

    读取public下边的所有资源

    pool.js 导出pool

    const mysql = require("mysql");

    //2:创建连接池对象

    var pool = mysql.createPool({

        host:"127.0.0.1",

        user:"root",

        password:"",

        database:"xz",

        port:3306,

        connectionLimit:5

    })

    //3:输出对象

    module.exports =  pool;

     

    app.js  nodejs创建服务器

    const pool = require("./pool");

    //1:加载指定模块 http;express;pool

    const http = require("http");

    const express = require("express");

    //2:创建express对象

    var app = express();

    //3:创建server对象

    var server = http.createServer(app);

    //4:绑定监听端口 3000

    server.listen(8888);

    //4.1制定静态资源的目录

        app.use(express.static("public"));

    //功能一:用户分页显示

    //GET /users    ?pno=3&pageSize=10

    //    users.php  (req,res)=>{...}

    app.get("/users",(req,res)=>{

        //5:接收请上请求

        //5.1:获取二个参数

        var pno = req.query.pno;

        var pageSize = req.query.pageSize;

        //5.2:默认值 1 pageSize  10

        //http=res.setHeadr()+res.write()+res.end();

        if(!pno){ pno = 1;}

        if(!pageSize){pageSize=10}

        //res.send(pno+"_"+pageSize);

        //5.3:正则表达式验证pno pageSize

        var reg = /^[0-9]{1,}$/;

        //res.setHeader+json+write+end

        if(!reg.test(pno)){

            res.json({code:-1,msg:"页码格式有误"});

            return;

        }

        if(!reg.test(pageSize)){

            res.json({code:-1,msg:"页大小格式有误"});

            return;

        }

        //结果对象

        var output = {pno:pno,pageSize:pageSize};

        var progress = 0;

        //5.4:创建二个sql  总记录数  当前页内容

        var sql = "SELECT count(uid) as c FROM xz_user";

        pool.query(sql,(err,result)=>{

            if(err)throw err;

            var pageCount = Math.ceil(result[0].c/pageSize);

            output.pageCount = pageCount;

            progress+=50;

            if(progress==100){

                res.json(output);

            }

        });

        //node.js 对占位符参数类型严格

        pno = parseInt(pno);

        pageSize = parseInt(pageSize);

        var offset = (pno-1)*pageSize;

        var sql = " SELECT uid,uname,phone,email";

            sql +=" ,avatar,user_name FROM xz_user";

            sql +=" LIMIT ?,?";

        pool.query(sql,[offset,pageSize],(err,result)=>{

            output.data = result;

            progress+=50;

            if(progress==100){

                res.json(output);

            }

        });

        //5.4:发送并且创建结果对象

    });

    相关文章

      网友评论

          本文标题:nidejs基础知识及服务器搭建。纯干货。抓紧收藏

          本文链接:https://www.haomeiwen.com/subject/wggxpftx.html