您的位置:首页 > Web前端 > Node.js

JS和Node.js的部分操作技巧

2017-12-03 11:23 232 查看
数据类型。

数据类型和json相互转换。

mysql数据库连接。

http server提取参数。

模拟发送http请求

var request=require("request");
console.log(request);
request.get("http://www.baidu.com/", function(error, response, body){
console.log(body);
var reqexp=/(http[s]?:\/\/[^'"]+)/g;
while(res=reqexp.exec(body)){
console.log(res[0]);
}
});


使用cheerio解析和操作dom

var cheerio=require("cheerio");
console.log(cheerio);

var $=cheerio.load('<div class="container"><div>');
var container=$('.container');

for(var i=0; i<10; i++){
var item=$('<div />');
item.addClass('item');
item.text(i);
container.append(item);
}

console.info($.html());


使用http请求数据,使用cheerio解析页面内容。

http.get('http://www.gongjuji.net', function(req, res){
var result="";
req.on('data', function(data){
result+=data;
});
req.on('end', function(){
//console.log(result);
parseHtml(result);
});
});

function parseHtml(result){
//console.log(result);
var $=cheerio.load(result);
console.log($.html());
console.log($.text());
console.log($.text().replace(/\s+/g, ' '));
console.log($.text().replace(/[ ]+/g, ' '));
console.log($.text().replace(/(\r\n)+[ ]+/g,'\r\n').replace(/(\r\n)+/g, '\r\n'));
console.log($.text().replace(/(\r\n)+/g, '\r\n'));

var captionList=$('.body-content .caption');
console.log(captionList);
var itemList=[];
captionList.each(function(item){
var cap=$(this);
var item={
title:cap.find('h3').text(),
linkUrl:cap.find('a').attr('href')
}
itemList.push(item);
});
console.info(itemList);
}


提取时间,格式化时间。

做项目的时候,经常会遇到时间戳和时间转换的问题。

js里边有一个Date对象,Date对象是Javascript提供的日期和时间的操作接口。

new Date(milliseconds):Date对象接受从1970年1月1日00:00:00 UTC开始计算的毫秒数作为参数。这意味着如果Unix时间戳作为参数,必须将Unix时间戳乘以1000。

unix时间戳:从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,注意是秒,而date对象接收的是毫秒。

new Date("2013-02-16 21:00:00")


对象接收一个标准的日期格式字符串,将其转换成对应时间。

date.getTime()


返回的是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数。

我们获取以字符串形式给予的日期的时间戳如下:

var date=new Date("2013-02-15 21:00:00");
var time=date.getTime()/1000;


Date.now()如何获取当前时间的时间戳,输出是毫秒。

Date.prototype.Format = function (fmt) { //author: meizz
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"h+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
}

console.log(new Date().Format("yyyy-MM-dd hh:mm:ss"));


console.log(new Date());
console.log(new Date("2013-02-15 21:00:00"));
console.log(new Date(1212121));
console.log(new Date().getTime());

var date = new Date("2013-02-15 21:00:00");
var time = date.getTime()/1000;//转换成秒; 我们再将其转换成日期格式的
var date = new Date( time * 1000 );//.转换成毫秒
var time = date.getFullYear() + "-" + (date.getMonth() < 10 ? '0' + (date.getMonth()+1) : (date.getMonth()+1)) + "-" + (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) ;

console.log(time);

//Date.now()获取当前时间的时间戳,输出是毫秒。
console.log(Date.now());


下载数据,按照html的dom格式解析

var request=require('request');
var cheerio=require('cheerio');

request.get('https://fund.jd.com/fund/detail/tab/netvalue?fundCode=000001&pageIndex=2', function(error, response, body){
console.log(body);
var $=cheerio.load(body);
console.log($('table tbody').html());
var trlist=$('table tbody').find('tr');
console.log(trlist);
trlist.each(function(item){
var tr=$(this);
console.log(tr.text());
var tdlist=tr.find('td');
tdlist.each(function(item){
//console.log(item);
var td=$(this);
if(item==0){
console.log("0 : ",td.text());
}else if(item==1){
console.log("1 : ",td.text());
}else if(item==2){
console.log("2 : ",td.text());
}else if(item==3){
console.log("3 : ",td.text().replace(/%/g,''));
}else{
console.log("Unknow : ",td.text());
}
});
});
});


注意:其中的each函数是jquery提供的函数,用于遍历数组,和原生的forEach相似。

node操作mysql数据库

var mysql=require('mysql');

var TEST_DATABASE='scan_data';
var TEST_TABLE='scan';

var client=mysql.createConnection({
host:'192.168.0.250',
user:'scan',
password:'scanpassword'
});

client.connect();

client.query('use '+TEST_DATABASE);

client.query(
'select * from '+TEST_TABLE,
function selectCb(err, results, fileds){
if(err){
throw err;
}
if(results){
for(var i=0; i< results.length; i++){
console.log("%d", results[i].id);
}
}
client.end();
}
)


var mysql      = require('mysql');
var connection = mysql.createConnection({
host     : 'localhost',
user     : 'root',
password : '123456',
database : 'test'
});

connection.connect();

connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
if (error) throw error;
console.log('The solution is: ', results[0].solution);
});


数组

处理数组类型数据时forEach方法会很方便

不废话,直接说怎么用吧:

var arr=['刘翔','刘洋','陈一冰','叶诗文']
arr.forEach(function(name){
//name就是arr数组中对应的元素
});


字典

处理字典类型的key-value对

var dict={
key1:'value1',
key2:'value2'
};
console.log(dict);
for(var key in dict){
console.log(key,dict[key]);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  node.js javascript