来源博客:【Harryの心阁】
node.js
- 编程运行环境
- 模块化开发
- exports对象导出,使用require方法引入
- 并且导入的文件名的后缀可以省略
- 使用module.exports.obj 导出模块成员
- exports 和module.exports指向不同的对象时 最终以后者为准
系统模块
- f:file s:syetem
- fs.reaFile(‘文件路径’[,‘文件编码’],callback) 读取方法
// 通过模块的名字
const fs = require('fs')
fs.readFile('./c.js', 'utf8', (err, doc) => {
// console.log(err);
// console.log(doc);
if(err ==null){
console.log(doc);
}
})
- 文件写入内容 fs.writeFile(‘文件路径’,‘数据’,callback)
// 通过模块的名字
const fs = require('fs');
fs.readFile('./c.js', 'utf8', (err, doc) => {
// console.log(err);
// console.log(doc);
if (err == null) {
// console.log(doc);
// 将另一个文件中获取的数据导入到指定的文件夹中
fs.writeFile('./write.js', doc, err => {
if(err == null){
console.log('写入文件成功');
}else{
console.log(`写入文件失败${err}`);
}
} )
}
})
- path路径操作 path.join(‘路径’,‘路径’, …)
const path = require('path')
let a = path.join('public','uploads','avatar')
console.log(a);
- 相对路径绝对路径,使用
__dirname
获取当前的绝对路径用于数据合并
第三方模块
- npm install/ uninstall 模块名称
- 安装淘宝源淘宝源
gulp模块
- gulp.src() 获取任务要处理的文件
- gulp.dest() 输出文件
- gulp.task() 建立gulp任务
- gulp.watch() 监控文件的变化
// 引用gulp
const gulp = require('gulp')
const path = require('path') // 获取环境
const htmlmin = require('gulp-htmlmin') // 压缩html
const fileinclude = require('gulp-file-include'); // 抽取公共的部分
const less = require('gulp-less'); //将less文件转化
const cssMin = require('gulp-css'); //压缩css
const jsmin = require('gulp-jsmin'); // 压缩js
const rename = require('gulp-rename'); //可以省略这是一个重新命名的操作
const babel = require('gulp-babel');
const uglify = require('gulp-uglify'); // 第二种压缩方法
// 执行命令
gulp.task('first', dnoe => {
console.log('人生中第一个gulp命令');
// 获取文件
gulp.src('./src/css/style.css')
// 压缩文件
.pipe(gulp.dest('dist/css'))
dnoe()
})
// html 任务 压缩文件,将公共代码抽取
gulp.task('htmlmin', done => {
gulp.src('./src/*.html')
.pipe(fileinclude({
prefix: '@@',
basepath: '@file'
})) // 抽取公共部分
// 压缩html文件的代码
.pipe(htmlmin({ collapseWhitespace: true }))
.pipe(gulp.dest('dist'));
done()
})
// css压缩 less格式转化
// 第一种
// gulp.task('lesscss',() =>{
// gulp.src('./src/css/*.less')
// .pipe(less({
// paths: [ path.join(__dirname, 'less', 'includes') ]
// }))
// .pipe(gulp.dest('./src/css'));
// gulp.src('./src/css/*.css')
// .pipe(cssMin())
// .pipe(gulp.dest('./dist/css'))
// })
// 第二种方法
gulp.task('cssless', done => {
gulp.src(['./src/css/*.less', './src/css/*.css']) // 先将less文件转化为css,在进行压缩
.pipe(less({
paths: [path.join(__dirname, 'less', 'includes')]
}))
.pipe(cssMin())
.pipe(gulp.dest('./dist/css'))
done()
})
// 将js代码压缩 第一种 将js代码从es6转化为es5
gulp.task('jsmin', done => {
gulp.src('./src/js/*.js')
.pipe(jsmin())
.pipe(rename({ suffix: '.min' }))
.pipe(gulp.dest('./dist/js/'))
done()
})
// 第二种转化后压缩
gulp.task('jsmm', done => {
gulp.src('./src/js/*.js')
.pipe(babel({
presets: ['@babel/env']
}))
.pipe(uglify())
.pipe(gulp.dest('./dist/js/'))
done()
})
// 构建任务
// gulp.task('default',['first','htmlmin','cssless','jsmin','jsmm'])
gulp.task('build', gulp.parallel('first', 'htmlmin', 'cssless', 'jsmin', 'jsmm'));
node_modules文件夹问题
- 项目依赖 dependencies 使用命令
npm install --production
- 开发依赖 加
--save-dev
命令 将包添加到package - package-lock.json 锁定包的版本,加快包的下载速度
- 别名的用法 在script中加入一个build,nodemon xx.js
- npm init -y 生成包
require查找规则
先找文件=>文件夹=>找package.json 中的main选项
如果直接写require(‘xx’) 默认先查找系统模块 node_modules
服务器端
- http 超文本协议,提供了一种发布和接受HTML页面的方法
- 传输协议://服务器ip或者域名:端口/资源所在的位置
创建web服务器
- 用于协议,创建对象req,res ,监听端口
// 创建网址服务器模块
const http = require('http')
// 网站服务器的对象
const app = http.createServer()
// 当客户端有请求来的时候
app.on('request',(req,res)=>{
res.end('<h2>hello user</h2>')
})
app.listen(3000)
console.log('网站服务器启动成功');
- http 协议
- 报文 请求或者响应过程中传递的数据块
- 请求报文 get 请求数据 post发送请求
- req.url 获取请求地址
- req.header 获取请求报文
- res.writeHead 设置响应状态码
响应报文
- 200 请求成功
- 404 请求的资源没有被找到
- 500 服务器端错误
- 400 客服端请求有语法错误
post参数
- 获取psot参数需要使用data和end事件
- 使用querystring系统模块将参数转化为对象的形式
// 创建网址服务器模块
const http = require('http')
// 用于处理url地址
const url = require('url')
// 网站服务器的对象
const app = http.createServer()
// 当客户端有请求来的时候
app.on('request',(req,res)=>{
// 自定义响应状态码
res.writeHead(200,{
// 设置响应信息
'content-type':'text/html;charset=utf8'
})
// 第一参数要解析的url地址,第二个参数是将查询参数解析成对象的形式
let {query,pathname} = url.parse(req.url, true)
console.log(query.name);
console.log(query.age);
// 解析的url地址
console.log(req.url);
// 获取请求地址
console.log(req.headers['accept']); // 获取请求报文
if(pathname == '/index' || pathname == '/'){
res.end('<h2>welcome to index,欢迎来到我的主页</h2>')
}else{
res.end('not found')
}
// if(req.url == '/index' || req.url == '/'){
// res.end('<h2>welcome to index,欢迎来到我的主页</h2>')
// }else{
// res.end('not found')
// }
console.log(req.method)
// if(req.method=='POST'){
// res.end('post')
// }else{
// res.end('get')
// }
})
app.listen(3000)
console.log('网站服务器启动成功');
// 创建网址服务器模块
const http = require('http')
// 用于处理url地址
const url = require('url')
// 网站服务器的对象
const app = http.createServer()
// 将提交的信息转化为对象
const querystring = require('querystring')
// 当客户端有请求来的时候
app.on('request',(req,res)=>{
// post参数是通过事件的方式接受的
// data 当请求参数传递的时候发出data事件
// end 当参数传输完成时发出end事件
let postParams = ''
req.on('data', params =>{
postParams += params
})
req.on('end',()=>{
console.log(querystring.parse(postParams));
// console.log(postParams);
})
res.end('ok')
})
app.listen(3000)
console.log('网站服务器启动成功');