常用的nodejs

node.js 运行在服务器端 只有一个运行环境 不存在兼容性问题

全局对象

1.global;
全局变量和全局函数都是全局对象global下的属性和方法;

2.console 对象;
log() //打印日志
info() //打印消息
warn()//打印警告
error()//打印错误
time()开始计时
timeEnd()结束计时

3.process 对象
arch //查看CPU架构
platform //查看操作系统
version //查看当前nodejs版本号
pid //查看当前的进程编号
kill()  //结束指定编号的进程

4.Buffer
缓冲区,在内存中临时储存的区域,存储网络传输的资源
let buf= Buffer.alloc(5,"abcd") //创建buffer储存控件
String(buf)
buf.toString()  //转字符串

模块

模块是一个功能体://核心模块 //自定义模块 //第三方模块
nodejs会自动给每个文件添加一个函数,程序员写的代码自动被函数包含,所有一个模块就是一个作用域
#示例
(function(){
	//程序员写的代码
})
module.exports //导出的对象,引入一个模块就会得到该模块导出的对象
require()  //引入模块
//导出功能
function getLength(r){
    return 2*Math.PI*r;
}
function getArea(r){
    return Math.PI*Math.pow(r,2)
}

module.exports={
    getLength,
    getArea
}

//导入功能
var circle=require("./circle.js");
var length=circle.getLength(5);
console.log(length)

模块中的默认参数

require: 是一个函数,用于引入模块
module: 当前模块的对象
module.exports 当前模块导出的对象
__filename: 当前模块的绝对路径,包括模块名称
__dirname: 当前模块的绝对目录

模块的分类

1.文件模块
以路径开头 require("./index.js")  用于引入自定义模块
不宜路径开头 require("http")   用于引入官方提供的核心模块
2.目录模块
以路径开头 require("./file") 会到目录下 寻找package,json 文件中查找main对应的文件,如果找不到会引入indexjs
不宜路径开头 require("index") 会到当前目录下node_modules中查找 index目录 找不到会一直往上以及目录下寻找
3.路径
上一级  ../
上上级 ../../

包和npm

包(package):就是一个第三方模块
npm: 用来管理包的工具,包含有下载安装、上传、升级、卸载…
npm -v 查看当前npm的版本号
下载地址: npm官网

(1)切换命令行的路径
cd 绝对路径 回车 如果有盘符变化需要添加 盘符名称: 回车
** 切换不同的盘符 盘符名称 c: 切换成功 再cd
在指定的目录的空白区域,按照shift键单击右键,选择‘在此处打开powershell窗口’
(2)下载包
npm install 包名称 回车
自动将下载的包放入到node_modules目录中,同时生成一个package-lock.json文件,用于记录当前 包的版本号。

模块

URL模块

#  网址 ,网络上的任何资源都有对应的URL
#  http://www.web.com:8080/login.html
#  协议  域名  端口 请求的服务器文件路径
parse()  #将查询字符串解析为对象  为了获取其中的数据

const url=require("url");   //引入url模块
let str="http://www.web.com:8080/login.html";
var addr=url.parse(str);
console.log(addr)

/*
Url {
  protocol: 'http:',
  slashes: true,
  auth: null,
  host: 'www.web.com:8080',
  port: '8080',
  hostname: 'www.web.com',
  hash: null,
  search: null,
  query: null,
  pathname: '/login.html',
  path: '/login.html',
  href: 'http://www.web.com:8080/login.html'
}
*/

querystring 模块

const querystring=require("querystring");
let str="kw=dell&price=4000";
var obj=querystring.parse(str)
console.log(obj)  //{ kw: 'dell', price: '4000' }
示例片段:  解析以下url 获取查询字符串
const url=require("url");  //引入url模块
const query=require("querystring")  //引入querystring模块
var str1="http://www.query.cn:433/web.html?cid=1995&cname=nodejs"; //字符串
var obj1=url.parse(str1);  //把url解析为对象 
var str2=obj1.query;       //获取url对象下的查询字符串
var obj2=query.parse(str2); //解析查询字符串 
console.log(obj2)   //{cid:"1995",cname:"nodejs"}
console.log(obj2.cname)  //"nodejs"

timer 全局模块

#一次性定时器
let timer=setTimeout(回调函数,间隔时间);
当间隔时间到了,会执行一次回调函数
clearTimeout(timer)


示例
const { clearTimeout } = require("timers")
let timer=setTimeout(()=>{
    console.log("boom boom boom")
},3000)
clearTimeout(timer)
#周期性定时器
let timer=setInterval( 回调函数, 间隔时间 )
每隔一段时间,执行1次回调函数
clearInterval(timer);


示例
const { clearTimeout } = require("timers");
let timer=setInterval(() => {
    console.log("铃铃铃")
}, 3000);
clearTimeout(timer)
#立即执行定时器
let timer=setImmediate( 回调函数 )
在主程序后的事件队列的最前边执行。
clearImmediate(timer)


示例
let timer=setImmediate(()=>{
    console.log(1)
})

fs模块
文件系统模块,用于文件的操作
文件分为文件形式和目录形式
fs.readdir(路径, 回调函数) 通过回调函数获取读取的目录
fs.readdirSync(路径) 通过返回结果(变量)获取读取的目录

引入fs模块
const fs=require("fs");
let obj=fs.readdirSync(路径)  //通过返回结果获取读取目录
let obj=fs.readdir(路径,(err,obj)=>{ //通过回调函数获取读取的目录
	//err可能产生的错误;
	//arr读取的结果
})  //通过回调函数获取读取目录
let obj=fs.statSyn("路径")  //查看文件的状态
obj.isFile() //是否为文件
obj.isDirectory() //是否为目录
fs.mkdir("路径","回调函数") /fs.rmdirSync("路径") //移除目录
fs.writeFile("文件路径","写入的数据","回调函数")  //覆盖写入 不存在就创建 存在 直接写入
fs.appendFile("文件的路径","写入的数据","回调函数") //追加写入
fs.readFile("文件路径,回调函数")  //读取文件
fs.unlink("文件路径,回调函数") //删除文件
fs.existsSync("文件路径")  //检测文件是否存在
fs.copyFile("源文件路径","目标文件路径","回调函数") //拷贝文件
fs.createReadStream("文件路径")  //创建可读取的文件流
fs.createWriteStream("文件路径") //创建可写入的文件流

同步:阻止后续代码的执行,只有执行完当前才会往后执行其它的;通过返回值获取结果
异步:不阻止后续代码的执行,通过回调函数获取结果`

http模块

//引入http模块
const http=require('http');
//创建web服务器
const app=http.createServer();
//设置端口
app.listen(8080);
//通过事件接收浏览器请求,一旦有请求会执行回调函数
app.on(‘request’, (req,res)=>{
   req 请求的对象
   req.url  获取请求的URL,端口号后的部分,例如 /jianbing
   req.method   获取请求的方法
   res 响应的对象
   res.writeHead(状态码, 对象)  设置响应的状态码和内容,第二个参数可以为空
   res.write()  设置响应的内容
   res.end()   结束并发送响应
});
const http=require("http");
const app=http.createServer();
app.listen(8080);

app.on("request",(req,res)=>{
    if(req.url==="/list"){
        res.write("this id product list");
    }else if(req.url==="/index"){
        res.writeHead(200,{
            'Content-Type':'text/html;charset=utf-8'
        });
        res.write('<h2>这里是首页<h2>')
    }else if(req.url==="/study"){
        res.writeHead(302,{
            Location:"http://www.baidu.com"
        })
    }else{
        res.writeHead(404);
        res.write('not found')
    }
    res.end()
});

第三方模块

express

1.创建web服务器
const express=require("express");
const app=express(); //创建web服务器
app.listen(8080);  //设置端口
2.路由
  用来接受请求,以及做出响应
  可以处理特定的请求,包括请求的方法、请求的URL、回调函数。
  当浏览器发出的请求匹配请求的方法和请求的URL就会自动触发该路由,执行回调函数。
  练习:创建路由,请求的方法get,请求的URL /list,响应’这是商品列表’。
  res响应的对象
  res.send()  设置响应的内容并发送
  res.sendFile()  设置响应的文件并发送,文件需要使用绝对路径 __dirname
  res.redirect()   设置响应的重定向(跳转)
简单示例  JS
const express=require("express");
const query=require("querystring")
const app=express();
app.listen(8080);

app.get("/search",(req,res)=>{
    res.sendFile(__dirname+'/search.html')
})

app.get("/login",(req,res)=>{
    res.sendFile(__dirname+"/login.html")
})

app.get("/mysearch",(req,res)=>{
    res.send("点击成功")
})

app.post("/mylogin",(req,res)=>{
    req.on("data",chunk=>{
        var let=String(chunk)
        var result=query.parse(let);
        console.log(result.uname)
    })
    res.send("查询成功")
})
//路由传参
app.get("/shopping/:lid/:num",(req,res)=>{
    console.log(req.params);
    res.send("添加成功")
})

简单示例HTML /login
<form action="/mylogin" method="POST">
    用户: <input type="text" name="uname"><br>
    密码:  <input type="password" name="upwd"><br>
    <input type="submit">
</form>

以上不同模块下的URL可能会出现相同,无法进行团队模块化开发
为了解决以上的问题 把同一个模块下的路由放在一起 最后把路由挂载到服务器下
在这里插入图片描述

路由器
const r=express.Router(); //创建路由器
//往路由器r中添加路由
module.exports=r;//导出路由器对象
web服务器  引入路由器并挂载
app.use( 添加的前缀, 引入的路由器 )
示例
服务器:
const express = require("express");
const app=express();
app.listen(8080);

//引入用户路由器
const userRouter=require("./user");
app.use("/user",userRouter)   

//用户路由器
const express=require("express");
const userRouter=express.Router();
userRouter.get("/login",(req,res){
	res.send("响应成功")
})
module.exports=userRouter
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值