您好,欢迎访问三七文档
Node.js基础介绍一、简介Node.js是一个基于ChromeV8引擎的JavaScript运行环境。Node.js使用了一个事件驱动、非阻塞式I/O的模型,使其轻量又高效。特点:1.它是一个Javascript运行环境(C++实现)2.依赖于ChromeV8引擎进行代码解释3.事件驱动4.非阻塞I/O5.轻量、可伸缩,适于实时数据交互应用6.单进程,单线程7.模块化编程8.事件轮询(eventloop)NPMNPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:允许用户从NPM服务器下载别人编写的第三方包到本地使用。允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。使用npm命令安装模块npm安装Node.js模块语法格式如下:$npminstallModuleName比如用npm安装的Node.jsweb框架模块express:$npminstallexpress安装好之后,express包就放在了工程目录下的node_modules目录中,因此在代码中只需要通过require('express')的方式就好,无需指定第三方包路径。varexpress=require('express');全局安装与本地安装npm的包安装分为本地安装(local)、全局安装(global)两种,从敲的命令行来看,差别只是有没有-g而已,比如npminstallexpress#本地安装npminstallexpress-g#全局安装使用淘宝镜像的命令安装(更快):cnpminstallnpm–g安装淘宝镜像方法:npminstall-gcnpm--registry=环境中;,一个.js文件就称之为一个模块(module)编写了一个hello.js文件,这个hello.js文件就是一个模块,模块的名字就是文件名(去掉;.js后缀),所以hello.js文件就是名为hello的模块。module.exports把函数greet作为模块的输出暴露出去,这样其他模块就可以使用greet函数再编写一个main.js文件,调用hello模块的greet函数:引入hello模块用Node提供的require函数:vargreet=require('./hello');一、创建Node.js应用(Hello,World)创建Node.js第一个Hello,World!应用前,让我们先了解下Node.js应用是由哪几部分组成的:引入required模块:我们可以使用require指令来载入Node.js模块。创建服务器:服务器可以监听客户端的请求,类似于Apache、Nginx等HTTP服务器。接收请求与响应请求服务器很容易创建,客户端可以使用浏览器或终端发送HTTP请求,服务器接收请求后返回响应数据。步骤一、引入required模块我们使用require指令来载入http模块,并将实例化的HTTP赋值给变量http,实例如下:varhttp=require(http);步骤二、创建服务器接下来我们使用http.createServer()方法创建服务器,并使用listen方法绑定8888端口。函数通过request,response参数来接收和响应数据。实例如下,在你项目的根目录下创建一个叫server.js的文件分析Node.js的HTTP服务器:第一行请求(require)Node.js自带的http模块,并且把它赋值给http变量。接下来我们调用http模块提供的函数:createServer。这个函数会返回一个对象,这个对象有一个叫做listen的方法,这个方法有一个数值参数,指定这个HTTP服务器监听的端口号。二、文件操作Node.js文件系统Node.js提供一组类似UNIX(POSIX)标准的文件操作API。Node导入文件系统模块(fs)语法如下所示:varfs=require(“fs”);2.1读文件异步和同步:Node.js文件系统(fs模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的fs.readFile()和同步的fs.readFileSync()。异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。建议用异步方法,比起同步,异步方法性能更高,速度更快,而且没有阻塞。步骤:1.引入一个fs模块(filesystem)varfs=require('fs');返回一个文件模块对象2.读文件fs.readFile('路径/文件名',function(err,data){})err文件读取错误没有错误err返回nulldata文件内容Buffer二进制流文件3.fs.readFile('路径/文件名','编码',function(err,data){})实例:读取index.htmlBuffer对象(缓冲区):JavaScript语言自身只有字符串数据类型,没有二进制数据类型。但在处理像TCP流或文件流时,必须使用到二进制数据。因此在Node.js中定义了一个Buffer类,该类用来创建一个专门存放二进制数据的缓存区。在Node.js中,Buffer类是随Node内核一起发布的核心库。Buffer库为Node.js带来了一种存储原始数据的方法,可以让Node.js处理二进制数据,每当需要在Node.js中处理I/O操作中移动的数据时,就有可能使用Buffer库。原始数据存储在Buffer类的实例中。一个Buffer类似于一个整数数组,但它对应于V8堆内存之外的一块原始内存。2.2写文件异步模式下写入文件的语法格式:fs.writeFile(file,data[,options],callback)如果文件存在,该方法写入的内容会覆盖旧的文件内容。参数参数使用说明如下:file-文件名或文件描述符。data-要写入文件的数据,可以是String(字符串)或Buffer(流)对象。options-该参数是一个对象,包含{encoding,mode,flag}。默认编码为utf8,模式为0666,flag为'w'callback-回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。示例:file.js2.3、其他文件操作fs.stat(path,callback)获取文件fs.open(path,flags[,mode],callback)打开文件fs.close(fd,callback)关闭文件fs.ftruncate(fd,len,callback)截取文件fs.unlink(path,callback)删除文件fs.mkdir(path[,mode],callback)创建目录fs.readdir(path,callback)读取目录fs.rmdir(path,callback)删除目录具体参数使用:三、Stream(流)Stream是一个抽象接口,Node中有很多对象实现了这个接口。例如,对http服务器发起请求的request对象就是一个Stream,还有stdout(标准输出)。Stream有四种流类型:Readable-可读操作。Writable-可写操作。Duplex-可读可写操作.Transform-操作被写入数据,然后读出结果。所有的Stream对象都是EventEmitter的实例。常用的事件有:data-当有数据可读时触发。end-没有更多的数据可读时触发。error-在接收和写入过程中发生错误时触发。finish-所有数据已被写入到底层系统时触发。3.1从流中读取数据详见main1.js3.2写入流详见main2.js3.3管道流管道提供了一个输出流到输入流的机制。通常我们用于从一个流中获取数据并将数据传递到另外一个流中。详见main3.js3.4链式流链式是通过连接输出流到另外一个流并创建多个流操作链的机制。链式流一般用于管道操作。用管道和链式来压缩和解压文件:zip.js,unzip.js五、操作数据库安装驱动:npminstallmysql连接数据库:mysql.js数据库操作:(案例)查询数据:mysql.js插入数据:insert.js更新数据:update.js删除数据:delete.js六、Node.jsExpress框架使用Express可以快速地搭建一个完整功能的网站。1.Express框架核心特性:可以设置中间件来响应HTTP请求。定义了路由表用于执行不同的HTTP请求动作。可以通过向模板传递参数来动态渲染HTML页面。2.安装方法:安装Express并将其保存到依赖列表中:$npminstallexpress--save以下几个重要的模块是需要与express框架一起安装的:body-parser-node.js中间件,用于处理JSON,Raw,Text和URL编码的数据。cookie-parser-这就是一个解析Cookie的工具。通过req.cookies可以取到传过来的cookie,并把它们转成对象。multer-node.js中间件,用于处理enctype=multipart/form-data(设置表单的MIME编码)的表单数据。第一个Express框架实例HelloWorldexpress-demo.js请求和响应Express应用使用回调函数的参数:request和response对象来处理请求和响应的数据。app.get('/',function(req,res){//--})Request对象request对象表示HTTP请求,包含了请求查询字符串,参数,内容,HTTP头部等属性。常见属性有:req.app:当callback为外部文件时,用req.app访问express的实例req.baseUrl:获取路由当前安装的URL路径req.body/req.cookies:获得「请求主体」/Cookiesreq.fresh/req.stale:判断请求是否还「新鲜」req.hostname/req.ip:获取主机名和IP地址req.originalUrl:获取原始请求URLreq.params:获取路由的parametersreq.path:获取请求路径req.protocol:获取协议类型req.query:获取URL的查询参数串req.route:获取当前匹配的路由req.subdomains:获取子域名req.accepts():检查可接受的请求的文档类型req.acceptsCharsets/req.acceptsEncodings/req.acceptsLanguages:返回指定字符集的第一个可接受字符编码req.get():获取指定的HTTP请求头req.is():判断请求头Content-Type的MIME类型Response对象response对象表示HTTP响应,即在接收到请求时向客户端发送的HTTP响应数据。常见属性有:res.app:同req.app一样res.append():追加指定HTTP头res.set()在res.append()后将重置之前设置的头res.cookie(name,value[,option]):设置Cookieopition:domain/expires/httpOnly/maxAge/path/secure/res.clearCookie():清除Cookieres.download():传送指定路径的文件res.get():返回指定的HTTP头res.json():传送JSON响应res.jsonp():传送JSONP响应res.location():只设置响应的LocationHTTP头,不设置状态码或者closeresponseres.r
本文标题:Node基础介绍
链接地址:https://www.777doc.com/doc-5948968 .html