Node.js知识整理

来源博客:【Harryの心阁

node.js

  1. 编程运行环境
  2. 模块化开发
  3. exports对象导出,使用require方法引入
  4. 并且导入的文件名的后缀可以省略
  5. 使用module.exports.obj 导出模块成员
  6. exports 和module.exports指向不同的对象时 最终以后者为准

系统模块

  1. f:file s:syetem
  2. 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);
    }
})
  1. 文件写入内容 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}`);
            }
            
        } )
    }
})
  1. path路径操作 path.join(‘路径’,‘路径’, …)
const path = require('path')

let a = path.join('public','uploads','avatar')
console.log(a);
  1. 相对路径绝对路径,使用__dirname获取当前的绝对路径用于数据合并

第三方模块

  1. npm install/ uninstall 模块名称
  2. 安装淘宝源淘宝源

gulp模块

  1. gulp.src() 获取任务要处理的文件
  2. gulp.dest() 输出文件
  3. gulp.task() 建立gulp任务
  4. 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文件夹问题

  1. 项目依赖 dependencies 使用命令 npm install --production
  2. 开发依赖 加--save-dev命令 将包添加到package
  3. package-lock.json 锁定包的版本,加快包的下载速度
  4. 别名的用法 在script中加入一个build,nodemon xx.js
  5. npm init -y 生成包

require查找规则

先找文件=>文件夹=>找package.json 中的main选项
如果直接写require(‘xx’) 默认先查找系统模块 node_modules

服务器端

  1. http 超文本协议,提供了一种发布和接受HTML页面的方法
  2. 传输协议://服务器ip或者域名:端口/资源所在的位置

创建web服务器

  1. 用于协议,创建对象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('网站服务器启动成功');
  1. http 协议
  2. 报文 请求或者响应过程中传递的数据块
  3. 请求报文 get 请求数据 post发送请求
  4. req.url 获取请求地址
  5. req.header 获取请求报文
  6. res.writeHead 设置响应状态码

响应报文

  1. 200 请求成功
  2. 404 请求的资源没有被找到
  3. 500 服务器端错误
  4. 400 客服端请求有语法错误

post参数

  1. 获取psot参数需要使用data和end事件
  2. 使用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('网站服务器启动成功');
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Harry-iu

顺手给小编加个鸡腿????

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值