node.js 基础

// 知道CommonJS规定了哪些内容:就是对代码进行模块化的拆分与组合时,需要遵循哪些规则

//    1.使用什么样的语法格式来引用模块

//    2.在模块中使用什么样的语法格式向外暴露成员

// Node.js中模块的根据来源不同分为三大类;三大分类各自是什么

// 1.内置模块(内置模块是由Node.js 官方提供的,例如fs、path、http等)

// 2.自定义模块(用户创建的每个js文件,都是自定义模块)

// 使用require()方法加载其他模块时,会执行被加载模块中的代码

// 3.第三方模块(由第三方开发的模块,并非官方提供的内置模块,也不是用户创建的自定义模块,使用前需要先下载)

//例1:创建主模块(main.js)和功能模块(circle.js),
//在功能模块下创建两个函数,传递半径,
//返回圆的面积或者周长;在主模块下调用暴露的两个函数

main.js 里面代码

const a=require("./circle")
const zc=a.zhouchang(3);
const b=require("./circle01")
const mj=b.mianji(3);
console.log(`周长是${zc} 面积是${mj.toFixed(2)}`)
//mianji
module.exports.mianji=function(r){
return Math.pow(r,2)*Math.PI
}
//zhouchang
module.exports.zhouchang=function(r){
return 2*PI*r
}

在03_1.js文件中引入到同一级目录模块03_2,目录【03_2是个文件夹】中包含index.js,
//在文件中创建函数传递任意两个数字返回总和,暴露该函数;最后在03_1.js
//中调用这个函数

03_1.js

const a =require("./03_2")

03_2文件夹下的02.js

console.log('我先显示')
const a =require("./index.js")
console.log(a.fn(1,3))

03_2文件下的index.js

module.exports.fn=function(a,b){
	return a+b
}

03_2下面的package包配置文件【设定谁先优先,谁就先在03_2文件下优先被找到】

{
"main":"02.js"
}

//(2)记录的包

//1.查询字符串模块(querrystring.js)
//查询字符串:浏览器端向服务端传递参数的一种形式,位于网址,格式
//http://www.codeboy.com:9999/products.html?kw=小米&a=1
//查询字符串模块用于操作查询字符串的工具模块
//parse()将查询字符串转为对象

//例子:
const querystring=require("querystring");
console.log(querystring);
//查询字符串
var str='kw=小米&a=1';
//将查询字符串转为对象,获取传递的值
var obj=querystring.parse(str);//parse 字符串
console.log(obj)//[Object: null prototype] { kw: '小米', a: '1' }
console.log(obj.kw,obj.a)//小米

//例如:获取以下查询字符串中传递的参数值【lid=18&count=2】答案如下:

const querystring=require("querystring");
//查询字符串
var str='lid=18&count=2'
//将查询字符串转为对象,获取传递的值
var obj=querystring.parse(str);//parse 把字符串转为对象
console.log(obj)
console.log(obj.lid,obj.count)//18,2

// 2.IP地址就是互联网上每台计算机的唯一地址:不直观,不便于记忆
//域名和域名服务器
// ip地址和域名是一 一对应的关系,这份对应关系存放在一个叫DNS的电脑里
// 域名服务器就是提供IP地址和域名之间的转换服务的服务器
// 端口号:就像门牌号
// 注意:每个端口号不能同时被多个web服务占用
// 在实际应用中,URL中的80端口可以被省略

//3.URL模块
将URL转换为对象

var
str='http://www/codeboy.com:9999/1.html?lid=8#one';
var obj=new URL(str);
console.log(obj.search.slice(1));//lid=8

//例如:获取以下URL中传递的参数,打印以下格式:
//’班级编号:xxx 课程名称:xxx‘

//

var
str='http://www/tmooc.cn:443/web.html?cid=2110&cname=node.js#one';
var obj=new URL(str);
var str=obj.search.slice(1);//?cid=2110&cname=node.js
const querystring=require("querystring");
var obj=querystring.parse(str);//parse 把字符串转为对象
//console.log(obj)
console.log(`班级编号${obj.cid}  课程名称:${obj.cname}`)//班级编号2110  课程名称:node.js


//4.定时器模块(timer)
//(1)一次定时器:
//开启

var timer=setTimeout(function(){
    console.log('bom!!!')
},3000)
//清除
clearTimeout(timer);

//(2)周期性定时器

var timer=setInterval(function(){
console.log('bom!!!')
},2000)
   clearInterval(timer)

//(3)立即执行定时器

console.log(2);
setImmediate(function(){
   console.log(3);
})
console.log(1);
输出 2 1 3


//所有定时器中的回调函数都是在事件队列中执行

//例如:使用周期定时器,每隔3秒钟打印’嘀嘀嘀‘,打印3次后清楚定时器
//方法一:

var i=0;
var timer=setInterval(function(){
    i++;
    if(i===3)
    clearInterval(timer)
    console.log('嘀嘀嘀')
    },3000)


//方法二:

var count=0;
var timer=setInterval(function(){
    console.log('嘀嘀嘀')
        count++;
    if(i===3){
    clearInterval(timer);
    }
},1000);

 //1.立即执行定时器
//processs.nextTick(回调函数)
//2.同步和异步
//同步:在主程序中执行,会阻止后续代码的执行,通过返回值来获取结果
//异步:回调函数
//3.文件系统模块fs

const fs=require('fs');


//(1)查看文件的状态

//方法一:

var s = fs.statSync('./03day01txt.js');


//方法二:

fs.stat('./03day01txt.js',function(err,dataStr){
if(err){
    console.log('异步的结果'+err)
}
    console.log('成功'+dataStr)
})
//
console.log('结束')
console.log(s)
//检测是否为目录
console.log(s.isDirectory());//返回false或者true
//检测是否为文件
console.log(s.isFile())


//(2)创建目录
 

//同步
fs.mkdirSync('./mydir');//在当前文件夹创建一个mydir的文件夹
console.log('结束')
//异步
fs.mkdir('./mydir02',function(err,dataStr){
if(err){console.log('err')}
console.log('结束')
})

//(3)练习使用同步和异步方法移除目录mydir和mydir02
 

//同步
fs.rmdirSync('./mydir');
console.log('结束')
//异步
fs.rmdir('./mydir02',function(err,dataStr){
if(err){console.log('err')}
console.log('结束')
})

//(4)写入文件
 

//同步方法:
fs.writeFileSync('./03day01txt.js','涛桑xxx');
//如果文件存在,则会更新内容;如果不存在会新建然后存入内容
console.log('结束')
//异步方法:
fs.writeFile('./03day01txt.js','dierci内容xxx',function(err){
        if(err){
   throw err;
  }
})
console.log("成功");


//(5)追加写入
 

//同步方法:
fs.appendFileSync('./03day01txt.js','涛桑xxx');
//异步方法:
fs.appendFile('./03day01txt.js','涛桑222xxx\n',function(err){
    if(err){
       throw err;
    }
})
console.log("成功")


//例如:创建数组,包含多个姓名,遍历数组获取每个姓名,将每个姓名使用异步方法写入到文件stu.txt

var arr=['小黄','小明','小红'];
for(i=0;i<3;i++){
   fs.appendFile('./03day01txt.js',arr[i]+'\n',function(err){
        if(err){
    throw err;
   }
   console.log("写入成功")
});
}

//方法二:

var arr=['小黄','小明','小红'];
arr= arr.join('\r\n');
fs.appendFile('./03day01txt.js',arr,function(err,dataStr){
        if (err) {
           console.log('输入失败' + err.message)
        }
        console.log('输入成功' + arr)
   })

//(6)读取文件

//异步方法:
var data=fs.readFileSync('./03day01txt.js');
console.log(data.toString());
//同步方法:
fs.readFile('./03day01txt.js','utf8',function(err,dataStr){
if (err) {
           console.log('输入失败' + err.message)
       }
       console.log('输入成功' + dataStr)
})


//方法二:
fs.readFile(__dirname+'/03day01txt.js','utf8',function(err,dataStr){
    if(err){
   return console.log('输出失败'+err.message)
    }
    console.log('输出成功'+dataStr)

})

//(7)删除文件
 

fs.unlinkSync('./01txt.txt');


//(8)检测是否存在

console.log(fs.existsSync('./a'));//返回false
//例子:如果文件2.txt不存在,则创建该文件夹
if(!fs.existsSync('./2.txt')){
   fs.mkdirSync('./2.txt')
}
//例子:如果文件2.txt存在,则删除该文件
if(fs.existsSync('./2.txt')){
    fs.unlinkSync('./2.txt')
}

//(9)拷贝文件

copyFileSync(源文件路径)
if(!fs.existsSync('./2.txt')){
    fs.mkdirSync('./2.txt')
}
fs.copyFileSync('./03day01txt.js','./2.txt/2.txt');
//从原文件03day01txt.js拷贝到2.txt/2.txt文件夹下的txt

//4.文件流
//createReadStream() 创建可读取的文件流
//createWriteStream() 创建可写入的文件流
//on(事件名称,回调函数) 添加事件,用于监听事件
//pipe() 管道,可以将读取流添加到写入的流

//5.http协议
//超文本传输协议
//是浏览器和web服务器之间的通信协议
// http模块,用来创建web服务器的模块;通过http模块提供
// 的http.createServer()方法,据能把一台电脑变成web服务器
// 从而对外提供web资源服务
// 注意:每个端口号不能同时被多个web服务占用
// 在实际应用中,URL中的80端口可以被省略

(1)通用头信息
Request URL:请求的URL,要请求的资源
Request Method:请求的方法,对资源的操作方式 分为增删改查
Status Code:响应的状态码
  1**:接收到了请求还没做出响应
  2**:成功的响应
  3**:响应的重定向
  4**:客户端请求的错误
  5**:服务端的错误
(2)响应头信息
Location:设置要跳转的URL
Content-Type:响应的内容类型,可以解决中文乱码 text/html;charset=utf-8
(3)请求头信息// 创建最基本的web服务器

// 1.导入http模块
const http = require("http");
// 2.创建web服务器实例
http.createServer(function(request, response) {
    response.writeHead(200, { 'Content-Type': 'text/plain' });
    response.end('Hello World');
}).listen(8081);

console.log('Server running at http://127.0.0.1:8081/');

// 3.为服务器实例绑定request时间,监听客户端的请求
// 4.启动服务器


//引入http模块
const http=require('http');
//创建web服务器
const server=http.createServer();
//设置端口,用于访问web服务器
server.listen(45,()=>{
    console.log('server running at http://127.0.0.1:45')

})
//请求服务器
//服务器端接受客户端请求并做出响应
//监听事件:一旦有请求进来,立即做出响应
server.on('request',(req,res)=>{

//设置响应的状态码和头信息
        res.setHeader('Content-Type','text/html;charset=utf-8')
            res.write('这是你的jianbing')
           res.end()
        res.end(str)
        console.log(str)
                    const str =`您请求的url地址是${req.url},
        您请求的类型是${req.method}`
})

//例如:使用http模块创建web服务器,添加事件接受请求作出响应
//“这是首页”

const http=require('http');
const server=http.createServer();
server.listen(60,()=>{
        console.log('server running at http://127.0.0.1:60')
})
server.on('request',(req,res)=>{
        res.setHeader('Content-Type','text/html;charset=utf-8')
res.wreteHeader()
            res.write('这是首页')
//    设置响应的状态码302,跳转到tmocc    
res.writeHeader(302,{
    Location:'https://www.tmooc.cn/'});
res.end();
//设置状态码为404
res.writeHead(404);
//设置响应的内容
res.write('not found');
res.end();
})

你可能感兴趣的:(node.js,其他,后端)