Node.js
模块
每一个模块都有一个操作可以公开/暴露自己的成员
语法:
exports.属性名=值module.exports.属性名=值module.exports={属性名:值}
exports和module.exports的区别
- 语法、写法、用法不同
exports=module.exports,exports={}//创建了一个空对象,把module.exports覆盖了
每个主模块都可导入/引入其他模块
语法var x=require("路径")
模块分类
官方模块require("官方模块名")
Global模块:不需要引入,可以直接使用
Golbal提供了五个预定义变量
__filename获取到当前文件的完整的绝对路径__dirname获取到当前文件的完整的绝对路径,不包含文件的名字exports空对象,可以用于公开暴露自己的成员require函数,可以用于导入其他模块module指代当前模块本身,甚至包含以上几个操作
定时器(周期性、一次性、瞬间定时器)用法一样,瞬间定时器无用,等效于一次性时间设为0
console用法一样
querystring模块:需要引入
- 引入:
var qs=require('querystring')解析url中查询字符串部分功能 var obj=qs.parse('请求消息')获取前端传来的每一个部分:obj.键名
缺点:不能解析完整的url路径
url模块:需要引入
- 引入:
var url=require('url')解析url中各个部分功能 var obj=qs.parse('请求消息',true)支持第二个参数,是一个布尔值,默认为false,一旦设置为true,就会自动释放querystring的parse方法去解析查询字符串部分
Buffer模块:不需要引入
可以将数据变成一个16进制的数字,node.js的一些API会自动把数据转为Buffer,但node.js的大部分API支持Buffer
fs模块:需要引入
引入:var fs = require('fs')
//异步读取文件
fs.readFile(__dirname+"文件路径",(err,buf)=>{
操作
})
//异步写入文件:会替换掉原来的东西
fs.writeFile(__dirname+"文件路径","新内容",(err)=>{
操作
});
//异步追加文件:不会替换掉原来的东西
fs.appendFile(__dirname+"文件路径","新内容",(err)=>{
操作
});
- 参数err,没什么用,错误的意思
- 参数buf读取文件,返回的内容,是Buffer类型的
- 因为是异步,操作只能放在函数里面
http模块:需要引入
引入:var http=require("http");
var http=require("http");
var url=require("url");
var fs=require("fs");
//创建了一个服务器应用
var app=http.createServer();
//为其绑定端口号 - 默认端口可以省略不写
app.listen(80);
//为其绑定请求事件:http/https 请求-响应模型,必须要有一个请求(前端),才能有一个响应(后端)
app.on("request",(req,res)=>{
//req - request(请求)对象,他有一个属性req.url,获取到前端传到后端的路由和请求消息,但是路由和请求消息是融为一体的,不方便我们获取某个部分,所以我们可以引入url模块,进行解析!分开两个部分!
var objUrl=url.parse(req.url,true);
//单独获取到了路由
var router=objUrl.pathname;
//判断路由读取不同的页面给用户看
if(router=="/"){
//res - response(响应)对象,他有一个方法res.end("响应东西"/buf) - 可以让前端不再转圈圈,我们回答了他,让她看到想要的东西
fs.readFile("./public/html/index.html",(err,buf)=>{
res.end(buf)
})
}
})
扩展:字符串API
match和indexOf非常相似,都是查找有没有,match支持正则,没有找到返回nullvar rs=str.match(reg);
自定义模块require("./模块路径")
文件模块
创建xx.js去公开了需要公开的内容,主模块引入,就必须写为require("./模块路径")
目录模块
- 比如创建m1的文件夹,在其中创建index.js的文件,公开了需要公开的内容,主模块引入,就必须写为require("./m1");
- 比如创建m2的文件夹,在其中创建xx.js的文件,公开了需要公开的内容,主模块引入,就必须写为require("./m2");
-
- 必须在其中创建一个package.json的配置文件,写入:{"main":"xx.js"}
- 创建一个文件夹必须名为node_modules,再在其中创建m3文件夹,在其中创建index.js的文件,公开了需要公开的内容,主模块引入,就必须写为require("m3");
第三方模块
- 打开npm网址:www.npmjs.com 搜索你需要用到的模块,尽量用带有完全符合标签的那个包,或者是第一个包
- 在你的项目中打开cmd
-
- 下载:npm i 包名;
-
- 更新:npm up 包名;
-
- 删除:npm un 包名;
- 检查npm是否安装成功:npm -v
mongo数据库
安装
第一步启动服务器
- 打开里面的bin文件夹在里面打开cmd输入:
.\mongod.exe --dbpath=路径路径保存着你以后要存储的所有数据
第二步启动客户端
- 再打开一个cmd输入:
.\mongo.exe
操作数据库语法:都是在客户端cmd输入
show dbs查看所有数据库use 数据库名称创建/切换数据库,没有就创建,有就切换db查看当前选中的数据库db.createCollectiom('表名')创建数据表db.dropDatabase()删除数据库
操作数据表
db.表名.save({键值对,....})增加,一次只能插入一条数据-
db.表名.save({键值对,....},{键值对,....})一次插入多条
db.表名.remove({})删除,删除数据库中所有的数据-
db.表名.remove({条件})条件依然是键值对的写法,满足这个条件的才删除
db.表名.update({条件},{$set:{新内容}})修改db.表名.find({})查找所有-
db.表名.find({条件})查找所有满足这个条件的
-
db.表名.find({},{键:1,键:0})查找所有数据,只返回需要的,1为需要,0为不需要
-
db.表名.find({}).sort({键:1})按照键升序排列:1升序,-1降序
-
db.表名.find({键:{$gt:18}})拿到所有键大于18的数据,gt大于,lt小于,gte大于等于,lte小于等于
-
db.表名.find({name:/A-z/})可以支持正则模糊查询
-
db.表名.find({}).skip(n).limit(m)从第n条开始拿m条数据
-
db.表名.find({}).count()获取此表有多少条数据
node.js操作mongoDB
下载安装第三方模块:mongoose
使用
引入:var mongoose=require("mongoose")
连接数据库:mongoose.connect("mongodb://127.0.0.1/数据库名称");
创建/选中出一个新的数据表的同时,设置数据类型的控制,防止用户乱输
var UserSchema=mongoose.Schema({
键:值类型
})
var User=mongoose.model("User",UserSchema,"数据表名");
增加
//创建要插入的对象
var x=new User({
键:值
})
//存储到数据库之中
x.save().then(()=>{
//操作,因为这是异步的
})
删除
User.deleteOne/deleteMany({条件}).then(()=>{
//操作,因为这是异步的
})
修改
User.updateOne/updateMany({条件},{新内容}).then(()=>{
//操作,因为这是异步的
})
查找
User.find({条件}).then((rs)=>{
rs -> 查询到的JSON数据
})
ajax
使用
//固定步骤
创建ajax核心对象
var xhr=new XMLHttpRequest();
//前端建立和服务器端的连接
xhr.open("GET/POST","/路由");
//向服务器端发送请求消息
xhr.send(null);
//绑定状态监听事件
xhr.onreadystatechange=()=>{
if(xhr.readyState==4&&xhr.status==200){
xhr.responseText;//得到后端响应的内容
}
}
特殊:
GET:send方法会失效,但是还不能省略,必须写为null
xhr.open("GET","/路由?key=value&...")xhr.send(null);
POST:send方法可用,必须写为
xhr.open("POST","/路由");xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded")xhr.send("key=value&...")