nodejs入门

nodejs

  1. 介绍 2
  2. 常用函数/方法 4
  3. node模块学习 4
  4. 前后数据交互 22
  5. mongodb 25
  6. node连接mongodb 35

(附实例一篇)https://coding.net/u/oTToTT/p... 阅读本文需要js基础 1.介绍 1.1.什么是 node 1.1.1.node 是一个开发平台, 就像 Java 开发平台、.Net 开发平台、一样有对应的编程语言、有语言运行时、有能实现特定功能的 API 1.1.2.使用的编程语言: javascript 语言 1.1.3.node.js 平台是基于 Chrom V8 javascript 引擎构建 (简称: 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.拥有开源开发生态系统NPM 1.3.学习资源 1.3.1.CNODE社区 https://cnodejs.org 1.3.2.雪球上的 http://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.语法:var fs = require(""fs""); 3.1.2.引入: 引入模块时,变量名最好和模块名一样 3.2.path模块 3.2.1.var path = require('path');用户格式化路径 3.2.2.path.join(__dirname,'./htmls/index.html') 路径拼接 3.3.querystring模块 3.3.1.var querystring = require(‘querystring’) 3.3.2.querystring.parse( str ) 将查询字符串换成对象 3.4.ur模块 3.4.1.var url = require(‘url’) 3.4.2.将uri转换成对象 3.4.3.u语法:url.parse( uri,true ),query 3.5.mime模块 3.5.1.下载依赖包 npm i mime -s 3.5.2.var mime = require(""mime""); 3.5.3.语法:mime.parse( ""./文件名"" ) 根据后缀名返回mime类型 3.6.underscore模块 3.6.1.下载依赖包:npm i underscore -s; 3.6.2.引入文件 var _ = require('underscore'); 3.6.3.使用 3.6.3.1.创建模版函数 var tplFn = _.template( str ); 3.6.3.2.填充数据: tplFn( { 数据对象} ); 模版内识别<%%>语法 可以使用对象的任何属性 3.7.fs(文件读写)模块 3.7.1.引入模块 var fs = require(""fs""); 3.7.2.异步读取文件(推荐) 3.7.2.1.语法:fs.readFile(""路径"",“编码”,function( 错误信息, 数据 ){ }) 3.7.2.2.参数解释 3.7.2.2.1.参数1:文件路径 3.7.2.2.2.参数2: 以什么格式读取出来 如果读取文件时没有指定编码,那么返回的将是原生的二进制数据<Buffer>;如果指定了编码,那么会根据指定的编码返回对应的字符串数据 3.7.2.2.3.参数3:读取完毕后的回调函数 3.7.2.3.回调函数参数 3.7.2.3.1.参数1:错误信息 3.7.2.3.2.参数2:读取到的数据信息 3.7.3.异步写入文件(推荐) 3.7.3.1.语法:fs.writeFile('路径',写入数据,编码,function (err){ } 3.7.3.2.参数解释 3.7.3.2.1.参数1:文件路径 3.7.3.2.2.参数2:要写入的数据(字符串) 3.7.3.2.3.参数3:编码格式(可选) 3.7.3.2.4.参数4:回调函数 3.7.3.3.回调函数参数: 3.7.3.3.1.错误信息 3.7.4.同步读取文件(如非必须不推荐) 3.7.4.1.语法:var data = fs.readFileSync('./data1.txt','utf8'); 3.7.4.2.同步读取文件需接受函数返回值,一般来说用try ...catch()捕获异常 3.7.4.3.参数解释: 3.7.4.3.1.参数1:路径 3.7.4.3.2.参数2:编码格式 3.8.http网络模块 3.8.1.引入模块:var http = require(""http""); 3.8.2.创建服务步骤 3.8.2.1.创建 http 服务 3.8.2.1.1.var server = 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.请求对象req(请求事件第一个形参) 3.8.3.1.req.url() //请求路径 3.8.3.2..headers 请求头 (对象) 3.8.3.3.req.method 请求方式""GET""||""POST"" 3.8.3.4..httpVersion http 版本 3.8.4.响应对象res(请求事件第二个形参) 3.8.4.1.设置编码:res.setHeader('Content-Type','text/plain ; charset=utf-8') 3.8.4.2.res.write('hello wrold');//返回数据 (注意数据会跟end()数据合并发送) 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(数据[, callback]) 3.9.express模块 3.9.1.创建服务器步骤 3.9.1.1.下载引入模块 npm i express -s var express = require(""express""); 3.9.1.2.初始化:var app = express() 3.9.1.3.注册请求处理事件: 3.9.1.3.1.app.get(‘/index.html’,function(){...} ) 3.9.1.3.2.app.post('路径',处理函数) 3.9.1.3.3.app.use('路径',处理函数 ) post/get严格判断路径。而use则判断以参数开头的路径请求 3.9.1.4.监听端口:app.listen(8080,function(){ ... }) 3.9.2.router中间件使用 3.9.2.1.创建路由对象:var router = express.Router() 3.9.2.2.添加路由方法 3.9.2.2.1.router.get( ""/index.html"",function(){} ) 3.9.2.2.2.app.use('路径',处理函数 ) 3.9.2.3.挂载路由到服务 app.use(""/"",router); 3.9.3.返回数据 3.9.3.1.app.send( ) 基于res.end()的封装 返回数据 参数可以是任意类型,内部自动处理 3.9.3.2.app.sendFile( “路径”,function(err){...} ) 读取文件并返回 3.9.3.3.静态文件返回 router.use(""/静态文件目录"",express.static(""./目录"")); 3.9.4.重定向 res.redirect( ""/"" ); 3.9.5.获取前台传递数据 3.9.5.1.get请求:req.query 返回处理后的对象吧 3.9.5.2.post请求 借助中间件 3.9.5.2.1.下载引入body-parser npm i body-parser -s 3.9.5.2.2.引包 var bodyParser = 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(""view engine"",""html""); 3.9.6.2.在请求事件中调用渲染 3.9.6.2.1.res.render( ""文件名"",“数据” ) 3.10.async模块 3.10.1.第一步 var async = require(""async"") 3.10.2.第二步 async.parallel({函数对象集合},所有函数执行完之后的回调函数(err,result){}) 4.前后数据交互 4.1.获取数据 4.1.1.前数据在requestd对象中,通过操作该对象获取数据 4.1.2.get请求获取 4.1.2.1.通过解析req.url获取 4.1.2.2.方法:url.parse(req.url,true)获取到一个对象 4.1.3.post请求获取 4.1.3.1.需要监听数据传输 4.1.3.2.第一步:注册数据传输事件,并将数据片段存储到数组中 var temp = []; 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.通过response对象的end()方法返回 5.mongodb 5.1.介绍 5.1.1.MongoDB是一个跨平台,面向文档的数据库,高性能,高可用性和易于扩展 5.1.2.mongo中的数据库:是一个集合的物理容器,一个单一的MongoDB服务器通常有多个数据库。 5.1.3.mongo中集合是一组MongoDB的文件。简单理解就是一个数组 (集合里面存放 json 对象 collection('one') 5.1.4.文档是一组键值对。(可以认为是 json 格式,但其实是 bson, bson 基于 json 格式) 5.2.连接启动 5.2.1.创建目录 c:datadb 5.2.2.命令行输入 mongod 启动服务(如果是c盘直接启动)其他盘符需要mongod --dbpath 目录 5.2.3.在新的 cmd 窗口 通过 mongo 命令连接数据库服务器 【也可以指定连接的主机名和端口号:`mongo --host 127.0.0.1 --port 27017】 5.3.操作指令 5.3.1.show dbs 查看所有数据库 5.3.2.ues 库名 切换 / 创建数据库 如果创建的数据库为空那么将不会保存创建信息 5.3.3.db 显示当前数据库名 5.3.4.show collections 查看当前数据库中所有的集合 5.3.5.插入数据:如果没有集合创建,存在既添加 db.集合名.insertOne({键:值}) 插入一条 db.集合名.insertMany([{},{}]) 插入多条数据 5.3.6.db.集合.find() //查找集合中的所有数据 db.集合.find({条件对象}) //查找符合条件的数据 db.集合.find({age:{$gte:""18""}})查询age大于等于18的文档 5.3.6.1.$gt 大于 $lt 小于 $e 等于 $ne不等于 5.3.7.db,集合.updata({条件对象},{值对象}) 更新替换符合条件的一条数据 db.集合.updata({条件对象},{$set:{值对象}}) 更新符合条件的一条数据 db.集合.updata({条件对象},{$set:{值对象}},{multi:true}) 更新符合条件的多条数据 5.3.8.db.集合.remove({条件对象}) 删除符合条件的数据 5.3.9.db.集合.drop()删除集合 5.3.10.db.dropDatabase()删除库 6.node连接mongodb 6.1.加载mongodb模块 var mongodb = require('mongodb') 6.2.获取数据库客户端对象 var client = mongodb.MongoClient 6.3.准备连接字符串 var host = ""mongodb://127.0.0.1:27017"" 6.4.连接数据库: client.connect(host,functiont( err,use ){ 通过use形参操作数据库 }); 6.5.将字符串id转换成mongoId mongodb.ObjectId( req.query.id ) 6.6.插入数据 use.db(""数据库名"").collection(""集合名"").insertOne({数据对象}, function(err,info) { //err:错误对象 ;info返回操作信息}); 6.7.findOne( {条件} , callback(err,doc) )查询一条 use.db(""库名"").collection(""集合"").find().toArray(function(err,info){ }) 查询全部 6.8.更新数据

  • 单条: update ( {条件} , { $set: {更新字段 }} , callback )
  • 多条 : update Many ( {条件} , { $set: {更新字段 }} , callback )
  • 替换 : update ( {条件} , {更新字段 } , callback )

6.9.- 删除单条: deleteOne ( {条件} , callback )

  • 删除多条: deleteMany ( {条件} , callback )

6.10.关闭连接 use.close()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券