Node.js开发Web后台服务(七)之json数据工具库lodash
文章 1945 0 0 0
发布时间:2019年02月23日

5.7、lodash

这是一个具有一致接口、模块化、高性能等特性的 JavaScript 工具库。可以非常方便的操作json。
官网:http://lodashjs.com/
安装:

npm i -g npm
npm i —save lodash

安装时先用cd切换到当前项目下。

如果浏览器使用可以直接引入:

<script src="lodash.js"></script>

添加lodash依赖:

Node.js开发Web后台服务(七)之json数据工具库lodash

依赖成功后会在package.json中添加引用:

Node.js开发Web后台服务(七)之json数据工具库lodash

后台Node.js使用,可以引入模块:

//导入lodash模块

    var = require('lodash');
    var products=[];
    products.push({name:"ZTE U880",price:899.8});
    products.push({name:"HuWei 荣耀8",price:1899.8});
    products.push({name:"iPhone 7 Plus 128G",price:5899.8});

    //1、取出第一个元素
    var obj1=.first(products);
    console.log(obj1.name);
    //ZTE U880

    //2、取出最后一个元素
    var obj2=.last(products);console.log(obj2.name);
    //iPhone 7 Plus 128G

    //3、指定查找条件返回符合条件的索引
    var obj3=.findIndex(products,function(obj){
        return obj.price>=1000&&obj.name.indexOf("7")>0;
    });
    console.log(obj3);

    //2//4、指定查找条件返回查找到的对象
    var obj4=.find(products,function(obj){
        return obj.price>=1000&&obj.name.indexOf("7")>0;
    });
    console.log(obj4);
    //{ name: 'iPhone 7 Plus 128G', price: 5899.8 }

    //5、排序
    var obj5=.orderBy(products,["price","name"],["desc","asc"]);
    console.log(obj5);

    //[ { name: 'iPhone 7 Plus 128G', price: 5899.8 },
    //{ name: 'HuWei 荣耀8', price: 1899.8 },
    //{ name: 'ZTE U880', price: 899.8 } ]

    //6、查找价格为1899.8的产品的key
    var obj6=_.findKey(products,{price:1899.8});
    console.log(obj6);
//1

API的使用非常简单,但需要注意版本,可以现查现用,API地址:https://lodash.com/docs/4.17.2&nbsp;

5.8、参数

5.8.1、URL中的参数占位

Checks route params (req.params), ex: /user/:id

127.0.0.1:3000/index,这种情况下,我们为了得到index,我们可以通过使用req.params得到,通过这种方法我们就可以很好的处理Node中的路由处理问题,同时利用这点可以非常方便的实现MVC模式;

//获得产品根据Id

router.get('/:id/:category',function(request,res,next){
    res.send(request.params.id+","+request.params.category);
});

运行结果:

Node.js开发Web后台服务(七)之json数据工具库lodash

5.8.2、URL中的QueryString

Checks query string params (req.query), ex: ?id=12

127.0.0.1:3000/index?id=12,这种情况下,这种方式是获取客户端get方式传递过来的值,通过使用req.query.id就可以获得,类似于PHP的get方法;

router.get('/:id',function(request,res,next){
    res.send("name:"+request.query.name);
});

运行结果:

Node.js开发Web后台服务(七)之json数据工具库lodash

5.8.3、HTTP正文中的参数

在post请求中获得表单中的数据。

检查urlencoded body参数 (req.body), ex: id=

127.0.0.1:300/index,然后post了一个id=2的值,这种方式是获取客户端post过来的数据,可以通过req.body.id获取,类似于PHP的post方法;

页面:

<!DOCTYPE html>
    <html>
    <head>
        <title><%= title %></title>
        <link rel='stylesheet' href='/stylesheets/style.css' />
    </head>
    <body>
        <h1><%= title %> - 产品列表</h1>
        <table border="1" width="80%">
            <tr>
                <th>序号</th>
                <th>名称</th>
                <th>价格</th>
            </tr>
            <%pdts.forEach(function(pdt,index){%>
            <tr>
                <td>
                    <%=index+1%>
                </td>
                <td>
                    <%=pdt.name%>
                </td>
                <td>
                    <%=pdt.price%>
                </td>
            </tr>
            <%});%>
        </table>
        <ul>
            <% for(var i=0; i<pdts.length; i++) {%>
            <li>
                <%=pdts[i].name%>
            </li>
            <% } %>
        </ul><p>
            <%if(typeof msg!="undefined"){%>
                <%=msg%>
            <%}%></p>
        <form action="pdt/add" method="post">
            <p>
                名称:<input name="name" />
            </p>
            <p>
                价格:<input name="price" />
            </p>
            <button>添加</button>
        </form>
    </body>
</html>

代码:

router.post('/add',function(request,res,next){
    var entity={name:request.body.name,price:request.body.price};
    products.push(entity);      //将product视图与指定的对象渲染后输出到客户端
    res.render('product', { title: '天狗商城', pdts:products,msg:"添加成功"});
});

结果:

Node.js开发Web后台服务(七)之json数据工具库lodash

5.9、JSON

如果需要Node.js向外提供返回JSON的接口,Express也是非常方便的,可以使用原来在浏览器中使用到的JSON对象,这是一个浏览器内置对象在服务可以直接使用:

将对象序列化成字符:

//对象

var rose={"name":"Rose","weight":"65"};
//序列化成字符串
var str=JSON.stringify(rose);
alert(str);

结果:

Node.js开发Web后台服务(七)之json数据工具库lodash

反序列化,将字符转换成对象:

//将字符串转换成JavaScript对象
var markStr='{"name":"mark","weight":"188"}';
var mark=JSON.parse(markStr);
alert(mark.name+","+mark.weight);

结果:

Node.js开发Web后台服务(七)之json数据工具库lodash

Express已经封装了一个json方法,直接调用该方法就可以序列化对象:

/ 产品 /

router.get('/rest', function(req, res, next) {
    res.json(products);
});

运行结果:

Node.js开发Web后台服务(七)之json数据工具库lodash

评论专区