nodejs----(1)

什么是:不是JS,是一种软件开发平台,它的竞争对象JSP/PHP/ASP.NET,历史第一次有一种语言可以通吃前后端.

 


Node运行的两种方式:

1.交互模块---简单了解(测试新功能)

   REPL:输入一行代码执行一行

   注意:交互模自带输出功能,不必一定要 console.log()

   node 回  进入交互模式

   .exit        退出

 2.脚本模块—正式项目中使用

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

      node 完整路径/x.js 回车

      提交:只要安装成node.js,重启webstorm,ws可以自动发现node.exe解析,新的项目和文件编写一定UTF-8

建议:所有目录名称,不要有中文,不要有空格


数据类型:(nodejs  vs  js)

nodejsjs

(1) 基本/原生/值类型

  string/number/boolean/null/undefined

(2)引用类型

   ES对象类型:Error/Data/Math/Array/RegExp/Object/....

   用户自定义对象类型:{}

   Node.JS 第三方对象:十万多 https://www.npmjs.com/

 

(1)基本/原生/值类型

    string/number/boolean/null/undefined

(2)引用类型

    ES对象类:Error/Data/Math/Array/RegExp/Object/....

  BOM:window;docuemnt,location,event,screen,....

  DOM:Element,Attribute,.....

  用户自定义对象类型:{}


模块概念:

一个项目中多个”模块”,订单模块,用户模块,支付模块....

         node.js按照功能,可以把函数,对象分别保存不同文件或目录下,这些目录和文件在node.js称为一个“模块”

        ##注意:Node.JS每个一个模块都是一个独立构造函数

         Node.JS解析器自动为每一个.js文件添加如下代码.

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

             exports:{} 于声明向部导出自

             require:fn 用于导入其它的模块,且创建定模块对象

             module: 当前模块对象

             __filename

             __dirname

             var i = 10;

             var j = 11;

             console.log(i+j);

});

每个模块都可以使用自己require();引入另一个模块—底层本质是创建指定模块一个对象实例.


自定义模块的两种形式:

(1)文件模块

      创建一个JS文件,如m3.js,导出其公开数据,

      其它模块可以require("./m3");引入

(2)目录模块

       方式一:创建一个目录,假设m4,其中创建index.js文件,导

              出需要公开数据。其它模块引入

              var m = require(“./m4”);

       方式二:创建一个目录,假设m5,其中创建5.js文件,导出需要

              公开数据数据,创建package.json文件 main指定启动

              文件 5.js 其它模块引入

              var m = require(“./m5”);

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

       ,其中再创建目录模块,假设 m6 其中创建 package.json

       文件,其中声明 main属性指定默认执行启动js,如6.js,

       其中导出需要公共数据,其它模块引入

       require(“m6”);


原生模块的使用(解析引擎自带)

1.Buffer(缓冲区)

 

                Buffer:缓冲区,本质上是一块内存区域,用于暂存以后要用到数据

                (数字,字符串,二进制图片/音频/视频),该区域称为“缓存”

                

#分配置一个指定大小缓冲区  1024字节

建议:缓冲区大小不超过 512KB   512*1024

    var buff1 = Buffer.alloc(1024);

#使用一个数组创建缓冲区

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

#使用一个字符串创建缓冲区

var buff4 = Buffer.from(“abc”);

#将一个缓冲区内容转换字符串{如果缓冲区数据是字符串}

var str = buff4.toString();

2.QueryString

   querystring模块用于处理HTTP请求URL中查询字符串

     var obj = qs.parse(str);   把查询字符串解析js对象

     var str = qs.stringify(obj) 把js对象转换为查询字符串

3.URL

  url模块用于解析一个HTTP请求地址,获取其中各个部分

   var obj = url.parse(str);    把一个URL地址为js对象

   var obj = url.parse(str,true); 功能同上,并且把其中查询字符串转换

4.fs

文件:在node.js 我们系统文件或者目录统称为文件

   fs 模块提供对文件和目录进行,增删改查,读定文件内容

1.同步读写文件(阻塞)

#同步读取文件内容 var data = fs.readFileSync(fileName);

#同步向文件写内容 fs.writeFileSync(fileName,data);

 注意:(1)如果当前写入文件并不存在,自动创建一个

      a.txt

      (2)如果当前写入目录并不存在,报错

      d:/abc/a.txt

      (3)如果当前文件己经存在内容,清空

#同步向文件追加内容

fs.appendFileSync(fileName,data);

2.异步读写文件(非阻塞)

#异步读取数据  fs.readFile(fileName,function(err,data){ });

               函数:文件读取完成后调用

               err:读取文件不存在,权限不足,

               自动创建错误对象 

         #异步写数据    fs.writeFile(fileName,data,function(err){})

                        函数:文件写结束调用

         #异步追加数据  fs.appendFile(fileName,data,function(err){})

                        函数:文件追加结束

5.http

 HTTP 模块可用于编写基于HTTP协议客户端程序(即浏览器),也可以编写一个基于HTTP协议服务器(APACHE)

用http模块编写一个web服务器

    (1)创建服务器对象        var server  = http.createServer();

    (2)绑定监听端口 1-65535  server.listen(3000);

    (3)接收客户端请求,      server.on(“request”,(req,res)=>{..})

    (4)并且响应客户消息      res.end(str...);

    

req:请求对象:保存客户端请求消息

req.url 请求url地址

 res:响应对象:服务器发送数据客户端,修改响应格式

 

三个常用对象:

1.server 代表服务器对象

2.req    (request)请求对象,保存客户端很多信息

req.url         客户请求地址

req.method    客户请求方式

req.httpVersion HTTP版本

req.headers     请求头

3.res    (response)响应对象,保存服务器端向客户发送数据

res.statusCode = 200;

res.setHeader(); 设置响应头

res.write();     向客户端输入响应消息主体

res.end();      通知客户端,响应消息结束(只能一次)

   常见错误:程序端口被占用

   listen EADDRINUSE :::3000

   解决:查找前面程序停止即可

 

6.第三方模块 (mysql/express)

mysql模块:

SQL语句的分类

DDL:数据定义语句  CREATE/DROP/ALTER…

DCL:数据控制语句  GRANT…

DML:操作操作语句 INSERT/UPDATE/DELETE

DQL:查询语句     SELECT

使用node.js访问mysql服务器:使用工具 npm 下载第三方模块(npm i mysql)

mysql模块使用步骤:

(1)下载模块

  (2)加载mysql模块                                         const mysql = require(“mysql”);

  (3)创建到数据库服务器连接                         var conn = mysql.createConnection({})

(4)发送sql语句并且获取服务器返回结果       conn.query(sql,(err,result)=>{});

  (5)关闭连接                                                      conn.end();

express模块:

使用官方提供HTTP模块可以创建一个web服务器应用,但此模块非常底层,要处理各种情形,比较繁琐。推荐使用HTTP高层模                    块,express—第三方模块,是一个基于node.js http模块的高层模块,服务器端开发。

使用步骤:

  1. 下载模块 npm i express
  2. 加载相应模块  http/express
  3. 创建express对象,再创建服务器对象,并且绑定监听端口

var app = express();

var server = http.createServer(app);

server.listen(3000)

常规语法规则:

app.get(请求地址,回调函数);

#接收客户请求 GET /index.html

app.get(“/index.html”,(req,res)=>{});

#接收客户请求 POST /index.html

app.post(“/index.html”,(req,res)=>{});

 

1:express req和res对象

res.sendFile(__dirname+文件绝对路径); =fs.read+res.write+res.end

res.send(向客户端返回html字符串响应);

res.json(obj); =setHead()+JSON.parse()+res.write()+res.end()

2:express GET 请求 接收参数二种方法

  #GET /login.do?uid=10&uname=tom

  app.get(“/login.do”,(req,res)=>{

    //express为每一个req对象添加属性query

    req.query.uid;

    req.query.uname;

});

#GET /login.do/12/tom

app.get(“/login.do/:uid/:uname”,(req,res)=>{

  //express 为每个req对象添加一个params 属性

  req.params.uid

  req.params.uname

});

3:为了项目提高效率à创建连接池

  (1)创建连接池

var pool = mysql.createPool({…}); host;user;password;

connectionLimit:5   连接池中活动连接5个

建议范围:5~25

(2)所有应用程序 租连接

   pool.getConnection((err,conn)=>{   });

(3)归还连接  conn.release();

4:请求方式:HTTP协议

      请求方法:用于标识此次请求的目的

      GET    表示客户端想”获得”指定资源

      POST   表示客户端想”上传/添加”指定数据给服务器,请求数据在请求主体中

      PUT    表示客户端想”放置”数据在服务器

      DELETE 表示客户端想”删除”服务器上指定资源

   5:发送请求

     浏览器发送GET请求

       地址栏输入url回车/表单GET/AJAX GET/超链接/js跳转/img src

     浏览器发送POST请求

       表单POST/AJAX POST

     浏览器发送DELETE请求

       AJAX-DELETE

     浏览器发送PUT请求

       AJAX-PUT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值