Fork me on GitHub

常见的node模块包及使用方法

最近在学习nodeJS相关的知识,自己结合学习中总结了一些node的一些常用模块以及用法。

1.node介绍

  • Node是基于chromeV8解析引擎之上构建的一个javascript运行的环境,或者说平台
  • 在node中,可以使用javascript语言进行编程
  • Node能解析和执行javascript(ECMAscript)代码
  • Node是一个平台,让javascript可以脱离浏览器环境运行
  • Node自身使用C++语言写出了很多系统级别相关的API,暴露了一些javascript环境API

    1.1node的特点

  • Single Thead:单线程
  • Event-driven:事件驱动
  • Non-blocking I/O model:非阻塞IO模型
    • 文件IO、网络IO基本上都是异步的
  • 所以在Node中会看到各种各样的花式回调

2.nodeAPI简介

  1. const request = require(‘request’)// 这个第三方提供的发请求的模块
  2. const cheerio = require(‘cheerio’)// node版的jquery,模拟了jquery的一些方法,帮助我们操作html字符串
  3. const fs = require(‘fs’) //文件模块

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    request('http://www.cnblogs.com/',function(res,result){
    //console.log(res.body);
    // load 是根据html字符串得到,一个dom对象!!!!
    let $ = cheerio.load(res.body)
    let $post_item = $('.post_item')
    // 我们一个标题对应一个文本文件,存储起来
    $post_item.each(function(index, item){
    let $a = $(item).find('.titlelnk')
    fs.writeFile(__dirname+'/data/'+$a.text(),$a.text(),function(err){
    console.log('完成')
    })
    })
    })
  4. const mongoose = require(‘mongoose’)// 这个npm模块是用来操作mongodb数据库的

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    const mongoose = require('mongoose')
    // 1.建桥, 建立连接
    const db = mongoose.connect('mongodb://tmp:123123@127.0.0.1:27017/tmp')

    //约束数据库的结构
    const UserSchema = new mongoose.Schema({
    name:String,
    completed:Boolean
    })
    // 得到了一个数据表 // 这里的todo对应todos数据表
    const Todo = mongoose.model('todo',UserSchema)

    // 创建要存储的数据对象
    const td = new Todo({
    name:'吃饭',
    completed:true
    })

    // 存储
    // td.save()
    Todo.findOne({},function(result){
    console.log(result)
    })
  5. var mysql = require(‘mysql’);//用来连接mysql数据库的

    1
    2
    3
    4
    5
    6
    7
    let connection = mysql.createConnection({
    host : 'localhost',
    user : 'root',
    password : '143720',
    database : 'studyit',
    port : '3309'
    });
  6. var express = require(‘express’);//node框架-express

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    var router = express.Router();//子路由
    // 导出
    module.exports = router;
    // 设置路由
    router.get('/',function(req,res){
    // res.send('hello nodejs');
    res.render('dashboard/index',{name:'itcast'});//渲染指定页面

    });
  7. var path = require(‘path’);//path模块

    1
    var rootPath = path.join(__dirname,'../');//__dirname:E:\www\project\day2\projectDemo\controllers
  8. var multer = require(‘multer’) // nodejs的中间件,用于处理 multipart/form-data 类型的表单数据, 它主要用于上传文件.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // 允许处理上传文件的路径和文件名
    var storage = multer.diskStorage({
    //上传文件的存放位置处理
    destination: function (req, file, cb) {
    cb(null, rootPath+'/uploads/avatars');
    },
    //上传文件后的文件名字处理
    filename: function (req, file, cb) {
    // console.log(file);//{ fieldname: 'tc_avatar',
    // originalname: 'b.png',
    // encoding: '7bit',
    // mimetype: 'application/octet-stream' }
    var originalname = file.originalname;
    var lastIndex = originalname.lastIndexOf('.');
    var filename = originalname.slice(0, lastIndex);//b
    var fileExt = originalname.slice(lastIndex);//.jpg

    // 原始名 + Date.now() + 原始后缀
    cb(null, filename + '-' + Date.now()+fileExt)
    }
    })
    var upload = multer({ storage: storage });
    router.post('/upfile',upload.single('tc_avatar(上传的文件名)'),function(req, res){
    //此时上传成功的文件会返回前台信息,即在req.file里面
    res.json(req.file);
    })
  9. var bodyParser = require(‘body-parser’);//中间件方法

  10. var cookieParser = require(‘cookie-parser’)//cookie的中间件
  11. var session = require(‘express-session’) // session的中间件
  12. var express = require(‘express’)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    var app = express();
    // 设置模板引擎
    // 指定模板引擎放在那里了?
    app.set('views',__dirname+'/views');
    // 指定使用哪个模板引擎
    app.set('view engine','xtpl');

    // 应用cookie的中间件,此中间件就会在响应(res)的时候设置cookie方法
    app.use(cookieParser());

    // 应用session的中间件
    // 在req中添加一个属性
    app.use(session({
    secret: 'keyboard cat',
    resave: false,
    cookie:{maxAge:60*60*24*1000}
    }))

    // 解析application/x-www-form-urlencoded
    app.use(bodyParser.urlencoded({extend:false}));

    // 设置目录 ,加载静态资源
    app.use('/',express.static('public'));
    app.use('/',express.static('uploads'));

    // 加载子路由
    var index = require('./controllers/index');
    // 挂载子路由
    app.use('/',index);
    // 监听端口
    app.listen(3000);

13.const fs = require(‘fs’)//文件模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//读取文件
fs.readFile('./REAME.md',function (err,data) {
if(err){
//抛出错误信息
throw err
}
//打印文件信息
console.log(data.toString())
})
//写入文件
fs.writeFile('./a.txt','hello world',function (err) {
if(err){
throw err
}
console.log('文件写入成功')
})

14.const utility = require(‘utility’)//加密工具
15.const gm = require(‘gm’) // 图片转换工具

  • 首先要下载安装GraphicsMagick或者ImageMagick,并配置环境变量,之后检测:命令行中输入gm
  • 安装:npm install gm
  • 使用:npm工具网址
1
2
3
4
5
6
// 图片创建  path:图片的路径      NewPath写入的新的路径
gm(path)
.crop(w,h,x,y)
.write(Newpath,function(err){
if(!err) console.log('done')
})
-------------本文结束感谢您的阅读-------------