1、每个模块都有一个操作,可以公开/暴露自己的成员:
(1)、exports.属性名=值
(2)、module.exports={
....
}
2、每个模块都有一个操作,可用于引入其他模块:
var xxx=require("./文件名"); - ./在引入时是不可以省略的,但是文件后缀可以省略
官方模块
1.Globals
1.__dirname - 当前文件夹的绝对路径。
2.__filename - 当前文件的完整的绝对路径
3.exports - 一个空{},公开和暴露自己的成员
4.module - 指代当前模块本身,包含了其他4个变量
5.require() - 一个函数,引入其他模块的
2.Querystring模块:查询字符串
需要引入:let qs = require('querystring');
提供了解析url的查询字符串部分的功能
var obj=qs.parse("查询字符串部分");
想要获取前端传来的某一个部分:obj.键名;
垃圾:只能解析查询字符串部分,如果前端传来的是一个完整的url网址,那他就解析不了
3.Url模块,网址模块
需要引入:let url = require('url');
提供了一些实用函数,用于 完整的URL 解析
var objUrl=url.parse("完整的url网址",true);//此方法会将url网址的各个部分全部解析出来,支持传入第二个参数,是一个布尔值,如果传入的是一个true,自动调用querystring的parse方法,顺便也解析了查询字符串(请求消息:前端->后端的东西)部分
1、查询字符串:objUrl.query.键名 - 拿到前端传到后端的东西
2、路由:objUrl.pathname; - 判断路由的不同
fs模块:FileSystem - 文件系统
需要引入:let fs = require('fs');
提供了可以操作文件的API
异步读取文件:
fs.readFile("绝对路径|文件路径",(err,buf)=>{
拿到buf要干嘛?就需要写在这里
})
异步写入文件:- 将原来的东西,替换掉
fs.writeFile("绝对路径|文件路径","写入的新内容",()=>{
console.log("写入完毕了,以后要做什么")
})
异步追加文件:- 保留原来的东西
fs.appendFile("绝对路径|文件路径","写入的新内容",()=>{
console.log("写入完毕了,以后要做什么")
})
6.http模块
引入:var http=require("http");
var url=require("url");
var fs=require("fs");
var app=http.createSever();
app.lister(80);
app.on("request",(req,res)=>{
var objUrl=url.parse(req.url,true);
var router=objUrl.pathname;
if(router=="/"&&首页){
fs.raedFile("路径"),(err,buf)=>{
res.end(buf);
}
}
else if(router.match(/css|js|jpg|png|gif|woff/)!=null){
fs.readFile("./public"+router,(err,buf)=>{
res.end(buf);
})
})
npm:node package manager:node的模块/包管理器:专门管理第三方模块的,作用:下载安装、删除、更新、维护包的依赖关系...
如何使用第三方模块:
1、打开网站:npm官网
2、搜索你需要用到的模块,尽量用带有完全符合标志的那个包
3、打开cmd:检查一下npm下载工具是否安装成功:npm -v
4、下载:npm i 包名
5、删除:npm un 包名 - win7系统,删除时只需删除当前包,不会删除依赖关系
6、更新:npm up 包名 - 有可能此项目n年后要维护,有可能包就过期了,需要更新
下周:使用mongoDB
MongoDB
1.启动和配置
2.语法
1、数据库操作:
1、查询数据库:show dbs
2、创建/切换数据库:use 数据库名称; - 如果是一个空的数据库,show dbs是查看不到的,至少要创建一个表才能看到
3、查看当前选中的数据库:db
4、创建数据表:db.createCollection("表名");
5、删除数据库:db.dropDatabase() - 能忘了就忘了,会坐牢
2、数据表操作:
1、创建数据表:db.createCollection("表名",{size:5242880,capped:true,max:5000}); - 第二个参数限制操作,最大存储空间为5M,最多为5000条数据 - 个人不推荐做限制
2、查看目前所有的数据表:db.getCollectionNames();
3、删除数据表:db.表名.drop();
3、数据操作:
1、增:db.表名.save({属性名:属性值,....}) - 一次只能插入一条数据 - 注册
举例:db.users.save({name:"hjf",age:18,pwd:"123123",email:"hjf@qq.com",vip:"0"})
db.表名.save([{},{},{},...]) - 一次只能插入一条数据
个人建议:键名要统一
2、删:db.表名.remove({键值对}) - 注销账号
举例: db.表名.remove({username:"lr"})
3、改:db.表名.update({条件},{要改的新内容}) - 修改密码
举例:db.表名.update({name:"paoge",pwd:"666666"},{age:17}) - 这句话会把名字为paoge和密码为666666的替换为只剩age为17
db.表名.update({name:"paoge",pwd:"666666"},{$set:{age:17}}) - 仅仅只修改了age
最难的:
4、查:db.表名.find({}) - 所有的
db.表名.find({age:18}) - 找到所有年龄为18的数据
db.表名.find({age:{$gte:18}}) - 找到所有年龄大于等于18的数据
db.表名.find({name:/正则/}) - 甚至可以写入正则来进行模糊查询
db.表名.find({},{name:1,age:1}) - 只需要name和age,其他的不要,1和0相当于是开关 - 我们登陆时只需要判断用户名和密码是否正确
db.表名.find().sort({age:1}) - 按照age升序排列,降序的话换为-1
db.表名.find().skip(0).limit(2) - 跳过前0条,再拿2条,可以理解为前两条;
db.表名.find().count() - 获取此表有多少条数据
node.js和mongoDB关联起来
1.引入mongoose
const mongoose=require("mongoose")
2.连接数据库
mongoose.connect("mongodb://127.0.0.1/数据库名称")
3.设置数据类型,防止用户乱输
var userSchema=monggoose.Schema({
name:String,
age:Number
........
})
var 模型名 =monggoose.model("users",userSchema,"users")
模型名首字母大写 模具表名
4.公开模型
module.exports={模型名}
sql语句上场了:
增:
var user=new 模型名({
name:objurl.query.name,
name:objurl.query.age
.................
})
user.save((err)=>{
console.log(err);//错误提示对象,null说明没有错误
//插入完毕后要干什么在这里写代码
})
删
uers.deleteOne/many({条件//name:name},(err)=>{
//删除完毕后要干什么在这里写代码
}
)
改:
模型名.updateOne/updateMany({条件},{新内容},(err)=>{
//修改完毕后要干什么在这里写代码
})
查:
模型名.find({条件},(err,result)=>{
result;//查询到数据库中的东西
})
ajax asynchronous JavaScript and XML; 直译
var xhr=new XMLHttprequest();
xhr.open("GET",""路由?key=value&key=value");
xhr.send(null);
xhr.onreadystatechange=()=>{
if(xhr.readyState==4&&xhr.status==200){
var date=xhr.responseText
}
}