美文网首页
nodejs相关包使用小结

nodejs相关包使用小结

作者: 前端工程狮_jam | 来源:发表于2017-10-30 11:09 被阅读0次

    此文主要是为了举例nodejs的一些相关包用法总结,没有nodejs环境可以先到官网下载安装。nodejs实质就是写js文件,根据一些包快速开发。这里只是列举其中一小部用法,详细的还需要各位去看看官网的API,这里只是提供给大家做个了解。

    目录

    1、http模块
    2、fs模块
    3、querystring模块
    4、url模块
    5、express模块
    6、body-parser模块
    7、cookie-parser和cookie-session模块
    8、ejs和jade模板引擎
    9、multer和path模块
    10、consolidate模块
    11、mysql模块
    12、package管理

    1、http模块

    //http模块可以创建服务器应用实例,也能发送http请求
    const http = require('http');
    //request请求  respone响应
    var server = http.createServer(function(req, res) {   
        // console.log(req.url);
        switch (req.url) {
            case '/1.html':
                // statements_1
                break;
            default:
                // statements_def
                break;
        }
    
        res.write('abc');  //反馈内容
        res.end();   //请求结束
    });
    //监听--端口--数字
    server.listen(8081);
    

    2、fs模块

    // fs模块用于对系统文件及目录进行读写操作
    const fs = require('fs');
    
    //readFile(文件名,回调函数)  读文件
    fs.readFile('./data/a.txt', function(err, data){
        if(err){
            console.log('读取失败');
        }else{
            console.log(data.toString());
        }
    });
    
    //writeFile(文件名,内容,回调函数)  写文件
    fs.writeFile('./data/b.txt', 'asfasfd2123asdafsd', function(err){
        console.log(err);
    });
    

    3、querystring模块

    //querystring从字面上的意思就是查询字符串,一般是对http请求所带的数据进行解析
    //form.html  get请求
    <body>
        <form action="http://localhost:8081" method="get">
            用户:<input type="text" name="user" value=""> <br/>
            密码:<input type="password" name="pass" value=""> <br/>
            <input type="submit" value="提交">
        </form>
    </body>
    //server.js
    const http = require('http');
    const querystring = require('querystring');
    
    http.createServer(function(req, res){
        //req获取前台的数据
        console.log(req.url);
        var GET = {};
        var url = req.url;
        if(req.url.indexOf('?') != -1){
            var arr = req.url.split('?');
            url = arr[0];
            GET = querystring.parse(arr[1]);
        }
        console.log(url, GET);
    
        res.write('aaa');
        res.end();
    }).listen(8081);
    
    //form.html  post请求
    <body>
        <form action="http://localhost:8081" method="post">
            用户:<input type="text" name="user" value=""> <br/>
            密码:<input type="password" name="pass" value=""> <br/>
            <input type="submit" value="提交">
        </form>
    </body>
    //server.js
    const http = require('http');
    http.createServer(function(req, res){
        var str = ''; //接收数据
        //data 有一段数据多次到达,当数据量大自动帮切段
        var i = 0;
        req.on('data', function(data){
            console.log(`第${i++}次收到数据`);
            str += data;
        });
        //data 数据全部到达(一次)
        req.on('end', function(data){
            console.log(str);
        });
    }).listen(8081);
    

    4、url模块

    //用于URL解析、处理等操作
    const http = require('http');
    const urlLib = require('url');
    
    http.createServer(function(req, res){
        //req获取前台的数据
        console.log(req.url);
        var obj = urlLib.parse(req.url, true);  //为true时将使用查询模块分析查询字符串,默认为false
        var url = obj.pathname;
        var GET = obj.query;
        console.log(url, GET);
    
        res.write('aaa');
        res.end();
    }).listen(8081);
    

    5、express模块

    const express = require('express');
    const expressStatic = require('express-static');
    
    var server = express();
    
    server.get('/', function(){
        console.log('有get请求');
    });
    server.post('/', function(){
        console.log('有post请求');
    });
    server.use('/', function(){
        console.log('有use');
    });
    server.use('/a.html', function(req, res){
        res.send('abc');
        res.end();
    });
    server.use('/b.html', function(req, res){
        res.send('123');
        res.end();
    });
    
    var users = {
        'xx': '123456',
        'cc': '789012'
    }
    server.listen(8081);
    
    server.get('/login', function(req, res){
        // var user = req.query;
        var user = req.query['user'];
        var pass = req.query['pass'];
    
        if(users[user] == null){
            res.send({ok: false, msg: '此用户不存在'});
        }else{
            if(users[user] != pass){
            res.send({ok: false, msg:'密码错误'});
        }else{
            res.send({ok: true, msg:'成功'});
            }
        }
    })
    server.use(expressStatic('./www'));
    
    //express_router路由
    const express = require('express');
    
    var server = express();
    
    //目录  /user/
    var routerUser = express.Router();
    routerUser.get('/1.html', function(req, res){
        res.send('user111');
    });
    routerUser.get('/2.html', function(req, res){
        res.send('user222');
    });
    server.use('/user', routerUser);
    
    //目录2 /article/
    var articleRouter = express.Router();
    articleRouter.get('/1001.html', function(req, res){
        res.send('adfasdfasdfaf');
    });
    server.use('/article', articleRouter);
    
    server.listen(8081);
    

    6、body-parser模块

    中间件,用于处理 JSON, Raw, Text 和 URL 编码的数据

    const express = require('express');
    const bodyParser = require('body-parser');
    
    var server = express();
    server.listen(8081);
    
    //在这里帮你包装了req.body,form表单提交get用req.query。提交post方式用req.body
    //有两个参数 extended 拓展 limit 限制
    server.use(bodyParser.urlencoded({}));
    
    // server.use(bodyParser.urlencoded({
    //  extended: true,   //拓展模式
    //  limit: 2*1024*1024  //默认100KB,限制成2MB
    // }));
    
    server.use('/', function(req, res){
        console.log(req.body); 
    });
    

    7、cookie-parser和cookie-session模块

    解析Cookie的工具,通过req.cookies可以取到传过来的cookie,并把它们转成对象。

    const express = require('express');
    const cookieParser = require('cookie-parser');
    const cookieSession = require('cookie-session');
    
    var server = express();
    
    //cookie
    //server.use(cookieParser(sdfasdfasdfasd));   //签名密钥
    server.use(cookieParser());
    server.use(cookieSession({
        name: 'sess',
        keys: ['aaa', 'bbb', 'ccc'],   //加密数组,越多越难破解
        maxAge: 2*3600*1000 
    }));
    
    server.use('/aaa/a.html', function(req, res){
        //res.cookie('test', 'xxlai');  //可以带参数
        // res.cookie('test', 'xxlai', {path: '/aaa', maxAge: 30*24*3600*1000});  //某个路径下才可以访问cookie,过期时间30天
    
        req.secret = 'sdfasdfasdfasd';  //加密,签名密钥
        res.cookie('test', 'xxlai', {signed: true});   //签名不能加密,但可以防止篡改值
    
        // console.log(req.cookies);
        console.log("签名cookies:", req.signedCookies);
        console.log("无签名cookies:", req.cookies);
    
        if(req.session['count'] == null){
            req.session['count'] = 1;
        }else{
            req.session['count']++;
        }
        console.log(req.session['count']);
    
        //delete req.session['count'];     //删除
    
        res.send('ok');
    });
    
    server.listen(8081);
    

    8、ejs和jade模板引擎

    //test.ejs
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        我的名字叫:<%= name %> 
        <% for(var i=0; i<json.arr.length; i++) { %>
            <div>用户名: <%= json.arr[i].user %> 密码: <% json.arr[i].pass %></div>
        <% } %> 
        <% 
            var str = "<div></div>"
        %>
        <%- str %>
        <% include ../a.txt %>
    </body>
    </html>
    //ejs.js
    const ejs = require('ejs');
    //可以传参渲染模板,=代表是转义输出,-代表不转义输出
    ejs.renderFile('./views/1.ejs', {name: 'xxlai'}, function(err, data){
        if(err)
            console.log('编辑失败', err);
        else
            console.log(data);
    });
    
    //test.jade
    doctype
    html
        head
            meta(charset="utf-8")
            title jade测试页面
        body
    //jade.js
    const jade = require('jade');
    const fs = require('fs');
    
    //var str = jade.render('html');   //生成 <html></html>  
    //1、jade模板引擎以每行缩进作为层级关系
    //2、属性放在()里,逗号分隔
    //3、内容空一格,直接往后堆
    //4、.点代表原样输出 类似style.
    //5、数据传递模板用#{name},style和css特殊,可省略 , span #{a}等价于 span=a
    //6、|开头的代表不是标签,原样输出
    //7、-开头的跟|类似,代表的也不是标签,表示这是代码,不输出。可做for循环使用。 可以只写一个-代表接下来的都是代码。不转义,有点区别=
    //8、加!代表不需要转义 div!=content
    var str = jade.renderFile('./views/1.jade', {pretty: true, name: 'xxlai', a: 12, b: 5,
        json: {width: '200px', height: '200px', background: 'red'},
        arr: ['aaa', 'bbb', 'ccc'],
        content: '<h2>title</h2><p>asdlkfjalsadfaf</p>'
    }); //pretty格式化排版
    
    console.log(str);
    
    fs.writeFile('./build/output.html', str, function(err){
        if(err)
            console.log('写入失败');
        else
            console.log('写入成功');
    })
    

    9、multer和path模块

    作为中间件进行数据处理,例如对附件上传下载。

    //upload.html
    <body>
        <!-- 注意enctype有3种值,这里是用multipart -->
        <form action="http://localhost:8080/" method="post" enctype="multipart/form-data">
          文件:<input type="file" name="f1" /><br>
          <input type="submit" value="上传">
        </form>
    </body>
    
    //upload.js
    const express=require('express');
    const bodyParser=require('body-parser');
    const multer=require('multer');
    const fs=require('fs');
    const pathLib=require('path');
    
    var objMulter=multer({dest: './www/upload/'});
    var server=express();
    
    //错误
    //server.use(bodyParser.urlencoded({extended: false}));
    server.use(objMulter.any());
    
    server.post('/', function (req, res){
      //1.获取原始文件扩展名
      //2.重命名临时文件
      var newName=req.files[0].path+pathLib.parse(req.files[0].originalname).ext;
      fs.rename(req.files[0].path, newName, function (err){
        if(err)
          res.send('上传失败');
        else
          res.send('成功');
      });
    });
    
    server.listen(8080);
    

    10、consolidate模块

    consolidate模块可以说是一个各种模板引擎的结合体。它包括了我们之前的jade和ejs。通过配置就可以使用多种模板引擎。

    const express=require('express');
    const static=require('express-static');
    const cookieParser=require('cookie-parser');
    const cookieSession=require('cookie-session');
    const bodyParser=require('body-parser');
    const multer=require('multer');
    const consolidate = require('consolidate');
    
    var server=express();
    server.listen(8080);
    
    //1.解析cookie
    server.use(cookieParser('sdfasl43kjoifguokn4lkhoifo4k3'));
    
    //2.使用session
    var arr=[];
    for(var i=0;i<100000;i++){
      arr.push('keys_'+Math.random());
    }
    server.use(cookieSession({name: 'zns_sess_id', keys: arr, maxAge: 20*3600*1000}));
    
    //3.post数据
    server.use(bodyParser.urlencoded({extended: false}));
    server.use(multer({dest: './www/upload'}).any());
    
    //4、配置模板引擎
    //输出什么东西
    server.set('view engine', 'html');
    //模板文件放在哪儿
    server.set('views', './views');
    //哪种模板引擎
    server.set('html', consolidate.ejs);
    
    //用户请求
    // server.use('/', function (req, res, next){
    //   console.log(req.query, req.body, req.files, req.cookies, req.session);
    // });
    //接收用户请求
    server.use('/index', function(req, res){
        res.render('1.ejs', { name: 'xxlai'});
    });
    
    //4.static数据
    server.use(static('./www'));
    

    11、mysql模块

    const express=require('express');
    consot mysql = require('mysql');
    
    var server=express();
    server.listen(8080);
    
    //连接数据库
    //createConection(哪台服务器, 用户名, 密码, 库)
    var db = mysql.createConection({
        host: 'localhost',
        port: '3306'
        user: 'test',
        password: '123456',
        database: 'jeecg'
    });
    
    //连接池  可以限制连接数,不用一直保持连接
    //createPool(哪台服务器, 用户名, 密码, 库)
    // var db = mysql.createPool({
    //  host: 'localhost',
    //  port: '3306'
    //  user: 'test',
    //  password: '123456',
    //  database: 'jeecg'
    // });
    
    console.log(db);
    
    //2、查询
    //query(干什么, 回调函数)
    db.query('select * from user_table;', (err, data) => {
        if(err)
            console.log('出错了', err);
        else
            console.log('成功了', data);
    });
    
    //接收用户请求,链式操作,next()走下一个步骤
    server.get('/', (req, res, next)=>{
      //查询banner的东西
      db.query("SELECT * FROM banner_table", (err, data)=>{
        if(err){
          res.status(500).send('database error').end();
        }else{
          res.banners=data;
    
          next();
        }
      });
    });
    server.get('/', (req, res, next)=>{
      //查询文章列表
      db.query('SELECT ID,title,summery FROM article_table', (err, data)=>{
        if(err){
          res.status(500).send('database error').end();
        }else{
          res.articles=data;
    
          next();
        }
      });
    });
    server.get('/', (req, res)=>{
      res.render('index.ejs', {banners: res.banners, articles: res.articles});
    });
    
    server.get('/article', (req, res)=>{
      res.render('conText.ejs', {});
    });
    

    12、package管理

    如果你觉得你有比较包可以提供给其它人使用,可以上传到这里。你只需要注册个帐户即可,可以发布和删除。 注意有版本号区别。

    //平常自己写模块化管理,需要注意引入问题,需要添加"./",对外输出东西必须加给exports
    //require 1.如果有"./" 从当前目录找  2.如果没有"./" 先从系统模块,再从node_modules找
    
    //如果对npm命令不太熟悉,可以打npm help查看相关指令
    //常用命令:
    //npm install 名字        安装
    //npm uninstall 名字      卸载
    
    1.注册、登录用户
        npm adduser
        npm login
    2.检查
        npm whoami
    3.建立package
        npm init
    4.发布
        npm publish
            *再次发布——加版本号,每次发布需要修改版本号以作区分
    5.删除发布
        npm --force unpulish  //删除当前版本号,根据package.json里指定
        npm unpublish 名字 --force  //删除整个包,慎重
    

    相关文章

      网友评论

          本文标题:nodejs相关包使用小结

          本文链接:https://www.haomeiwen.com/subject/wohvyxtx.html