Http模块
1.引入http模块
node-http-server
//表示引入http模块
const http = require('http');
//创建web服务
/*
request 获取url传过来的信息
response 给浏览器响应信息
*/
http.createServer(function(request,response){
//设置响应头
response.writeHead(200,{'Content-Type':'text/plain'});
//表示给页面上面输出一句话并结束响应
response.end('hello World');
}).listen(8081); //端口
URL模块
url.parse() 解析URL
const url = require('url');
var api='http:www.baidu.com?name=zhangsan&age=20';
var temp = url.parse(api,true)
console.log(temp);
var getValue = temp.query;
console.log(getValue);
console.log(`name:${getValue.name}--age:${getValue.age}`);
supervisor工具
npm install -g supervisor
用supervisor代替node
CommonJS
提供一个类似python语言的标准库
是模块化的标准,nodejs是模块化的实现
核心模块:
http,url,fs
文件模块:自定义模块
自定义模块的规定
1,可以把公共的功能抽离成为一个单独的js文件作为一个模块,默认情况下这个模块的方法或属性,外部无法访问。如果让外部访问模块里面的方法或属性,就必须在模块里面通过 exports获得module.exports暴露属性或者方法
2,需要使用这些模块时,通过require的方式引入模块,可以使用模块里面暴露的属性和方法
function A(a){
return a*a;
}
exports.A = A;
// 或者
// module.exports = obj;
//有一点区别,都可以使用
const x = require('./a.js')
x.A(1);
在node_modules文件夹下的文件,可以直接写node_modules之后的路径,不写全路径
默认找模块里面的index.js文件
可以在package.json文件更改入口
通过npm init --yes生成package.json文件
包目录
- package.json 包描述文件
- bin 用来存放可执行二进制文件的目录
- lib 用于存放javaScript代码的目录
- doc 用来存放文档的目录
通过npm命令,下载第三方的模块(包)
npmjs.com文档
– save 写入依赖
1.找到包
2.下载包
3.引用包
4.使用包
6.npm i 表示安装dependencies的所有依赖包
格式化日期的包, silly-datetime
指定包的版本 npm install jQuery@2.1.0
package.json 定义了这个项目所需要的各种模块以及项目的配置信息(比如名称、版本、许可证等元数据)
1.创建package.json
npm init 或者 npm init --yes
2.package.json文件
^ 表示第一位版本号不变,后面两位取最新的
~表示前两位不变,最后一个取最新
*表示全部取最新
没有前缀表示指定版本
淘宝镜像
npm install -g cnpm --registry=http://registry.npm.taobao.org
FS模块
const fs = require('fs')
//fs.stat 检查是文件还是目录
fs.stat('./html',(err,data)=>{
if(err){
console.log(err);
return;
}
console.log(`是文件:${data.isFile()}`);
console.log(`是目录:${data.isDirectory()}`);
});
//fs.mkdir 创建目录
fs.mkdir('./css',(err)=>{
if(err){
console.log(err);
return;
}
console.log("success!")
});
//fs.writeFile 创建写入文件,
//如果文件已经存在,直接覆盖文件,不存在就创建
fs.writeFile('./html/index.html','hellojs',(err)=>{
if(err){
console.log(err);
return;
}
console.log("success!")
})
//fs.appendFile 追加文件
// 不存在,创建,存在,追加
fs.appendFile('./css/base.css','body{color:red}',(err)=>{
if(err){
console.log(err);
return;
}
console.log("success!")
})
//fs.readFile 读取文件
fs.readFile('./html/index.html',(err,data)=>{
if(err){
console.log(err);
return;
}
console.log(data.toString());//buffer 转化为string类型
})
//fs.readdir 读取目录
fs.readdir('./html',(err,data)=>{
if(err){
console.log(err);
return;
}
console.log(data)
});
//fs.rename 重命名移动文件
// 1.修改名称 2.移动文件
// 旧路径 新路径 回调函数
fs.rename('./css/aaa.css','./css/index/css',(err)=>{
if(err){
console.log(err);
return;
}
console.log('success');
});
//fs.rmdir 删除目录
//目录里面有文件 不能删除 ,先删除目录里的所有文件,在删除目录
fs.rmdir('./aaa',(err)=>{
if(err){
console.log(err);
return;
}
console.log('success');
});
//fs.unlink 删除文件
fs.unlink('./aaa/html.js',(err)=>{
if(err){
console.log(err);
return;
}
console.log('success');
});
案例
1.判断是否存在upload目录,如果没有就创建这个目录,有就不做操作
const fs=require('fs');
var path = './upload';
fs.stat('./upload',(err,data)=>{
if(err){
//创建目录
mkdir(path);
return;
}
if(data.isDirectory()){
console.log('cunzai')
}else {
//先删除同名文件再执行创建目录
fs.unlik(path,(err)=>{
if(!err){
mkdir(path);
}else{
console.log('error!')
}
})
}
});
//创建目录方法
function mkdir(dir){
fs.mkidr(dir,(err)=>{
if(err){
console.log(err);
return;
}
})
}
第三方 mkdirp
var mkdirp = require(‘mkdirp’)
ES6常见语法的使用
1.let const 模板字符串
let name='zhangsan'
const age = 20
console.log(`${name}deage${age}`)
2.箭头函数 this指向上下文
function(){
}
()=>{
}
3.对象、属性的简写
var name='zhangsan'
var app = {
name,
run(){
console.log(`${this.name}runing`)
}
}
app.run();
4.Promise
async是让方法变成异步
await 是等待异步方法执行完成,必须用在异步方法中
以流的方式
读取文件
const fs = require('fs')
var readStream = fs.createReadStream('./data/input.text');
var count = 0;
var str='';
readStream.on('data',(data)=>{
str+=data;
count++;
});
readStream.on('end',(data)=>{
console.log(str);
console.log(count);
});
readStream.on('error',(err)=>{
console.log(err);
});
写入文件
var fs = require('fs');
var data='ifhaigfikabifafjbasfhall';
var writeStream = fs.createWriteStream('./data/output.txt');
writeStream.write(data);
//标记写入完成
writeStream.end();
writeStream.on('finish',()=>{
console.log('写入完成');
})
管道流,主要用于大文件
var fs=require('fs')
//创建一个可读流
var readerStream = fs.createReadStream('input.txt');
//创建一个可写流
var writerStream = fs.createWriteStream('output.txt');
readerStream.pipe(writerStream);
console.log("程序执行完成")
创建一个静态web服务器