标签归档:javascript

通过Nodejs读取xml文件数据

博客是通过hexo搭建的,发布到线上也就是html静态文件了,总不能每次发版更新一个json文件吧,然后想到sitemapx.xml文件来代替json文件,因为每次hexo发布代码都需要更新sitemapx.xml文件。所以就想到用Nodejs读取xml文件。

示例

目录树:

.
├── README.md
├── app.js
├── data
│   └── post-sitemap.xml
├── node_modules
│   ├── ...
├── package-lock.json
└── package.json

app.js

const fs = require('fs');
const xml2js = require('xml2js');
const parser = xml2js.Parser();

fs.readFile('./data/post-sitemap.xml', function (err, data) {
    parser.parseString(data, function (err, res) { 
        console.dir(res);
        console.log(res.urlset.url);
    });
})

代码仓库

https://github.com/Keystion/nodejs-read-xml-example

依赖

一些不错的console.log

1、http://www.pixijs.com/

var e = [
    "\n %c %c %c Pixi.js 4.1.0 - ✰ WebGL ✰  %c  %c  http://www.pixijs.com/  %c %c ♥%c♥%c♥ \n\n", 
    "background: #ff66a5; padding:5px 0;", 
    "background: #ff66a5; padding:5px 0;", 
    "color: #ff66a5; background: #030307; padding:5px 0;", 
    "background: #ff66a5; padding:5px 0;", 
    "background: #ffc3dc; padding:5px 0;", 
    "background: #ff66a5; padding:5px 0;", 
    "color: #ff2424; background: #fff; padding:5px 0;", 
    "color: #ff2424; background: #fff; padding:5px 0;", 
    "color: #ff2424; background: #fff; padding:5px 0;"
];
window.console.log.apply(console, e)

2、https://www.baidu.com/

window.console && window.console.log && (console.log("一张网页,要经历怎样的过程,才能抵达用户面前?\n一位新人,要经历怎样的成长,才能站在技术之巅?\n探寻这里的秘密;\n体验这里的挑战;\n成为这里的主人;\n加入百度,加入网页搜索,你,可以影响世界。\n"),
    console.log("请将简历发送至 %c ps_recruiter@baidu.com( 邮件标题请以“姓名-应聘XX职位-来自console”命名)", "color:red"),
    console.log("职位介绍:http://dwz.cn/hr2013"))

3、https://www.tmall.com/

var e = {
    "info": "\u55b5~ \u52a0\u5165\u6211\u4eec\u5427 http://tb.cn/iS8NBOy",
    "logo": "   :::                                :::  \n :::::::                             ::::: \n:::::::::                          ::::::::\n:::::::::::::::::::::::::::::::::::::::::::\n::::    :::    ::::::::::::::::   :::  ::::\n:::    Smart    :::::cool::::    Crazy  :::\n:::::   :::    :::::::::::::::    :::   :::\n:::::::::::::::::::::::::::::::::::::::::::"
};
window.console && console.info && console.info(e.logo + "\n\n" + e.info)

4、https://www.alipay.com/

var t = "\u6e29\u99a8\u63d0\u793a\uff1a\u8bf7\u4e0d\u8981\u8c03\u76ae\u5730\u5728\u6b64\u7c98\u8d34\u6267\u884c\u4efb\u4f55\u5185\u5bb9\uff0c\u8fd9\u53ef\u80fd\u4f1a\u5bfc\u81f4\u60a8\u7684\u8d26\u6237\u53d7\u5230\u653b\u51fb\uff0c\u7ed9\u60a8\u5e26\u6765\u635f\u5931 \uff01^_^", 
    s = "\u505a\u5730\u7403\u4e0a\u6700\u5177\u4e92\u8054\u7f51\u6027\u3001\u521b\u65b0\u6027\u3001\u4e13\u4e1a\u6709\u7231\u7684\u56e2\u961f\u3002", 
    n = "https://github.com/alipay/x", 
    i = [s, " ", n].join("");
console.log("%c AliPay %c Copyright \xa9 2004-%s", 'font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;font-size:64px;color:#00bbee;-webkit-text-fill-color:#00bbee;-webkit-text-stroke: 1px #00bbee;', "font-size:12px;color:#999999;", (new Date).getFullYear()),
console.log("%c " + t, "color:#333;font-size:16px;"), 
console.log("\n " + i)

5、http://www.alloyteam.com/

window.console && console.log && console.log("\n" + "   _    _  _                _____                         \n  \/_\\  | || |  ___   _   _ \/__   \\  ___   __ _  _ __ ___  \n \/\/_\\\\ | || | \/ _ \\ | | | |  \/ \/\\\/ \/ _ \\ \/ _` || '_ ` _ \\ \n\/  _  \\| || || (_) || |_| | \/ \/   |  __\/| (_| || | | | | |\n\\_\/ \\_\/|_||_| \\___\/  \\__, | \\\/     \\___| \\__,_||_| |_| |_|\n                     |___\/\n\n 欢迎加入AlloyTeam:请将简历(邮件标题后面再加上'from console')发送至 %c Kinvix@QQ.com \n", "color:red");

0、本屌站 略略略

window.console && console.log && console.log("%c\n\\                 \/ \n \\       _       \/   |        | \n  \\     \/ \\     \/ __ |__   __ |  __ \n   \\   \/   \\   \/ |_  |  \\ \/   | \/  \\ \\  \/\\  \/ \n    \\_\/     \\_\/  |__ |__\/ \\__ | \\__\/  \\\/  \\\/ \n\n", "color:blue")

本来想好好写写的,结果败在懒上。应该是2、3月之前的日记了。

JavasSript 变量的寻址与传递

代码片段 1

var obj   = {};
    obj.x = 1;
    obj.y = 2;

function test (obj)  {
    obj.x = 111;
}

test(obj);
console.log(obj);
// result >>>>>>>>>  {x=111,y=2}

代码片段 2

var obj   = {};
    obj.x = 1;
    obj.y = 2;

function test(obj) {
    var obj2 = {};
        obj  = obj2;
}

test(obj);
console.log(obj)
// result >>>>>>>>>  {x=1,y=2}

代码片段一就不在讲述,但凡对值类型和引用类型有一定的了解的话,那这个应该是没疑问的。

<!–more–>

代码片段二有两个应该注意的地方:

1 test方法内变量的寻址

test方法内部可以取到三个变量,新定义了的对象obj2参数obj还有方法外的obj
这三个参数有一个特别要注意的地方是,后面两个的名字是一样的,这样在方法运行的时候一定会优先取得参数的那个obj变量。而方法外的那个obj参数实际相当于window.obj

2 变量的传递过程

在调用test方法,并传入方法外的obj变量,实际相当于传入window.obj这样一个引用类型①,也就是说代码obj = obj2;实际是对这个拷贝的地址的改变,因为这个地址只是个拷贝,所以这并不会改变其指向的真实对象。而代码片段1的obj.x = 111;这会通过obj这个地址查询到x这个属性,并对其赋值。

other

var num = 1;

function outFn() {
    this.num = 10;
    function inFn() {
        console.log(num);
        var num = 100;
        console.log(this.num);
        console.log(window.num);
    }
    return inFn;
}

var newfn = outFn();
new newfn();  // this指向了对象

注:
引用类型:引用类型的特点是在传递的过程中并不进行自身的值复制,而是传入地址的拷贝。

转自:http://www.cnblogs.com/rulee/archive/2012/09/03/2663800.html