当前位置: 首页 > 后端技术 > Node.js

nodejs入门

时间:2023-04-04 00:00:30 Node.js

nodejs2常用函数/方法4node模块学习4前后数据交互22mongodb25节点连接mongodb35(附实例)https://coding.net/u/oTToTT/p...阅读本文需要js基础知识1.简介1.1。什么是node1.1.1.node是一个开发平台,就像Java开发平台和.Net开发平台一样,有相应的编程语言,语言运行库,以及可以实现特定功能的API1.1.2。使用的编程语言:javascript语言1.1。3.node.js平台基于ChromV8javascript引擎(简称:V8引擎)1.1.4构建。可以开发控制台程序(命令行程序)和桌面应用程序(GUI)(借助node-webkit、electron等框架实现)、Web应用程序(网站)1.2。特点1.2.1。事件驱动触发事件执行回调函数1.2.2.非阻塞I/O文件读写和网络传输采用异步操作不会阻塞程序执行1.2.3.单线程的主要目的是减少内存开销1.2.4。拥有开源开发生态系统NPM1.3。学习资源1.3.1。CNODE社区https://cnodejs.org1.3.2。Snowballhttp://mengxy.net/slides/node...1.3.3.Node.js包教学不包含https://github.com/ppker/node...2。常用函数/方法2.1.__dirname方法返回服务器的绝对路径3.Node模块学习3.1.Node将功能封装在不同的子模块中,如果要使用它,必须导入模块3.1.1。语法:varfs=require(""fs"");3.1.2。导入:导入模块时,变量名要与模块名相同3.2.pathmodule3.2.1.varpath=require('path');用户格式化路径3.2.2.path.join(__dirname,'./htmls/index.html')路径连接3.3.querystring模块3.3.1.varquerystring=require('querystring')3.3.2.querystring.parse(英石r)将查询字符串转换为对象3.4.ur模块3.4.1.varurl=require('url')3.4.2.将uri转换为对象3.4.3.u语法:url.parse(uri,true),查询3.5.mime模块3.5.1。下载依赖包npmimime-s3.5.2.varmime=require(""mime"");3.5.3。语法:mime.parse("./filename"")根据后缀名3.6.underscore模块3.6.1返回mime类型。下载依赖包:npmiunderscore-s;3.6.2.导入文件var_=require('underscore');3.6.3.使用3.6.3.1。创建一个模板函数vartplFn=_.template(str);3.6.3.2.填充数据:tplFn({dataobject});识别模板中的<%%>语法可以使用对象3.7.fs(文件读写)模块3.7.1的任意属性。导入模块varfs=require(""fs"");3.7.2.异步读取文件(推荐)3.7.2.1。语法:fs.readFile(""path"","encoding",function(errorinformation,data){})3.7.2.2。参数说明3.7.2.2.1.参数一:文件路径3.7.2.2.2。参数2:读取文件编码时如果没有指定以什么格式读取,则返回原始二进制数据;如果指定了编码,则按照指定的编码返回对应的字符串数据3.7.2.2.3.参数3:读取后回调函数3.7。2.3.回调函数参数3.7.2.3.1。参数一:错误信息3.7.2.3.2。参数2:读取数据信息3.7.3。异步写入文件(推荐)3.7.3.1。语法:fs。writeFile('path',writedata,encoding,function(err){}3.7.3.2.参数说明3.7.3.2.1.参数一:文件路径3.7.3.2.2.参数二:要写入的数据(String)3.7.3.2.3.参数三:编码格式(可选)3.7.3.2.4.参数四:回调函数3.7.3.3.回调函数参数:3.7.3.3.1.错误信息3.7.4.同步读取文件(如非必要,不推荐)3.7.4.1。语法:vardata=fs.readFileSync('./data1.txt','utf8');3.7.4.2.同步读取文件需要接受函数的返回值,一般来说,使用try...catch()catchexception3.7.4.3。参数说明:3.7.4.3.1。参数一:路径3.7.4.3.2。参数2:编码格式3.8.http网络模块3.8.1。导入模块:varhttp=require(""http"");3.8.2。创建服务步骤3.8.2.1。创建http服务3.8.2.1.1.varserver=http.createServer();3.8.2.2。注册请求事件3.8.2.2.1.server.on('request',function(req,res){}req为请求对象,包含了客户端所有的请求信息,res为服务端响应对象,所有响应操作需要通过这个对象3.8.2.3.监听端口3.8.2.3.1.server.listen(9000,function(){console.log('服务已经启动,请访问:http://127.0.0.1:9000')})3.8.3.Requestobjectreq(request事件的第一个形参)3.8.3.1.req.url()//请求路径3.8.3.2..headers请求头(object)3.8.3.3.req.method请求方法""GET""||""POST""3.8.3.4..httpVersionhttp版本3.8.4.响应对象res(请求事件第二个形参)3.8.4.1.设置编码:res.setHeader('Content-Type','text/plain;charset=utf-8')3.8.4.2.res.write('hellowrold');//返回数据(注意数据会和end()data)3.8.4.3..statusCode设置或读取http状态码3.8.4.4..statusMessage设置或读取http响应状态消息3.8.4.5..writeHead(statusCode[,statusMessage]_[,headers])设置响应头信息(该方法是上面的合写)3.8.4.6。结束响应并返回数据:res.end(data[,callback])3.9.express模块3.9.1.创建服务器步骤3.9.1.1。下载导入模块npmiexpress-svarexpress=require(""express"");3.9.1.2。初始化:varapp=express()3.9.1.3。注册请求处理事件:3.9.1.3.1.app.get('/index.html',function(){...})3.9.1.3.2.app.post('path',processingfunction)3.9.1.3.3.app.use('path',处理函数)post/get严格判断路径并使用判断以参数3.9.1.4开头的路径请求。监听端口:app.listen(8080,function(){...})3.9.2.router中间件使用3.9.2.1。创建路由对象:varrouter=express.Router()3.9.2.2。添加路由方法3.9.2.2.1.router.get(""/index.html"",function(){})3.9.2.2.2.app.use('path',处理函数)3.9.2.3.将路由挂载到服务app.use(""/"",router);3.9.3.返回数据3.9.3.1.app.send()基于res.end()封装返回数据参数可以是任意类型,内部自动处理3.9.3.2.app.sendFile("path",function(err){...})读取文件并返回3.9.3.3。静态文件返回router.use(""/静态文件目录"",express.static(""./Directory""));3.9.4.重定向res.redirect(""/"");3.9.5.获取前端传输数据3.9.5.1.get请求:req.query返回处理后的对象require(""body-parser"")3.9.5.2.3.配置:app.use(bodyParser.urlencoded({extended:false}))参数:false字符串,数组true:任意3.9.5.2.4。调用req.body返回请求体对象3.9.6。ejs模板渲染3.9.6.1。设置步骤3.9.6.1.1。设置模板文件路径app.set(""views"",文件夹绝对路径)3.9.6.1.2.自定义模板:app.engine(""html"",require(""ejs"").renderFile)参数1:自定义模板名称参数2:模板引擎3.9.6.1.3。指定渲染模板app.set(""viewengine"",""ht毫升"");3.9.6.2。在请求事件中调用渲染3.9.6.2.1.res.render(""filename"","data")3.10.async模块3.10.1.第一步varasync=require(""async"")3.10.2。第二步async.parallel({functionobjectcollection},callbackfunction(err,result){})所有函数执行完后4.前后台数据交互4.1.获取数据4.1.1。之前的数据在requested对象中,通过操作对象4.1.2获取数据。获取获取请求4.1.2.1。4.1.2.2解析req.url获取。方法:url.parse(req.url,true)获取对象4.1.3.post请求获取4.1.3.1。需要监控数据传输4.1.3.2.第一步:注册数据传输事件,将数据分片存储在数组中vartemp=[];req.on(""data"",function(v){temp.push(v)})4.1.3.3.第二步:注册数据发送结束事件,将接收到的数据分片数组转换成buffer,转换成查询字符串req.on(""end"",function(){temp=Buffer.concat(temp).tostring();})4.2。返回数据4.2.1。通过响应对象的end()方法返回5.mongodb5.1.简介5.1.1.MongoDB是一个跨平台、面向文档的数据库,高性能、高可用、易扩展5.1.2.Mongo数据库:是物理容器的集合,单个MongoDB服务器通常有多个Database5.1.3。mongo中的集合是一组MongoDB文档。简单理解就是一个数组(集合存储json对象collection('one')5.1.4.文档就是一组键值对。(可以认为是json格式,但实际上是bson,bson是基于json格式的)5.2.连接开始5.2.1。创建目录c:datadb5.2.2。在命令行输入mongod启动服务(如果是直接从c盘启动)otherdrives符号需要mongod--dbpathdirectory5.2.3.在新的cmd窗口中通过mongo命令连接数据库服务器【也可以指定连接的主机名和端口号:`mongo--host127.0.0.1--port27017】5.3.操作说明5.3.1.showdbs查看所有数据库5.3.2.ues库名切换/创建数据库如果创建的数据库为空,创建信息将不保存5.3.3.db显示当前数据库名5.3.4.showcollections查看当前数据库中的所有收藏5.3.5。插入数据:如果没有创建集合,添加db.collectionname.insertOne({key:value})插入一个db.collectionname.insertMany([{},{}])插入多条数据5.3.6.db.collection.find()//查找集合中的所有数据db.collection.find({conditionobject})//查找符合条件的数据db.collection.find({age:{$gte:""18""}})查询age大于等于18的文档5.3.6.1.$gt大于$lt小于$e等于$ne不等于5.3.7.db,set.updata({conditionobject},{valueobject})更新替换一条满足条件db的数据。set.updata({conditionobject},{$set:{valueobject}})更新一条满足条件的数据db.set.updata({conditionobject},{$set:{valueobject}},{multi:true})更新多条满足条件的数据5.3.8.db.set.remove({conditionobject})删除满足条件的数据5.3.9.db。collection.drop()删除集合5.3.10.db.dropDatabase()删除库6.node连接mongodb6.1.加载mongodb模块varmongodb=require('mongodb')6.2.获取数据库客户端对象varclient=mongodb.MongoClient6.3。准备连接字符串varhost=""mongodb://127.0.0.1:27017""6.4.连接数据库:client.connect(host,functiont(err,use){通过use参数操作数据库});6.5.将字符串id转化为mongoIdmongodb.ObjectId(req.query.同上)6.6。插入数据use.db(""数据库名"").collection(""集合名"").insertOne({dataobject},function(err,info){//err:errorobject;info返回操作信息});6.7.findOne({condition},callback(err,doc))查询一个use.db(""库名"").collection(""collection"").find().toArray(function(err,info){})查询全部6.8.更新单项数据:update({condition},{$set:{updatefield}},callback)多项:updateMany({condition},{$set:{updatefield}},callback)replace:update({condition},{updatefield},callback)6.9.-删除单个项目:deleteOne({condition},callback)删除多个项目:deleteMany({condition},callback)6.10.关闭连接使用。关闭()