之前项目用php高频的采集和结算,让我们php的效率大大的降低,而且php阻塞让我们的网页无法正常的运行。所以找一种能替代php操作数据库 ,和采集的语言,并与php完美的结合。
node.js 是一个基于 chrome v8 引擎的 javascript 运行环境。 node.js 使用了一个事件驱动、非阻塞式 i/o 的模型,使其轻量又高效。 node.js 的包管理器 npm,是全球最大的开源库生态系统。
初识nodejsnodejs,就像我们php的composer ,能用npm 命令下载nodejs的相关插件。
用前端的javascrip只是就能操作基本的功能,学习的成本大大的降低了。
普通操作nodejs 链接数据库
这个时候我们会依赖npm来下载mysql的模块
切换到我们项目,npm install mysql -save
创建一个运行sql的文件 mysql.js
//连接数据库var mysql = require('mysql');var connection = mysql.createconnection({
host: 'localhost',
user: 'root',
password: 'root',
database:'carbird'});
connection.connect();//查询connection.query('select * from `think_order`', function(err, rows, fields) {
if (err) throw err;
console.log('查询结果为: ', rows);
});//关闭连接connection.end();
运行该js ,这个时候 就已经可以实现大部分功能了,定期的结算功能,分担php的压力,包括采集数据
做一个nodejs采集1680210彩票存入数据库的例子创建 pacong.js
var http = require("http");var iconv = require('iconv-lite');var option = {
hostname: "api.api68.com",
path: "/klsf/getlotteryinfo.do?issue=&lotcode=10005"};
var req = http.request(option, function(res) {res.on("data", function(chunk) {console.log(json.parse( iconv.decode(chunk, "utf-8") ));
});
}).on("error", function(e) {console.log(e.message);
});
req.end();
其中var iconv = require(‘iconv-lite’); 这个模块需要npm 下载引入,来解决中文乱码问题
结果为:
{ errorcode: 0,
message: '操作成功',
result:
{ businesscode: 0,
message: '操作成功',
data:
{ predrawissue: 2018030717,
predrawcode: '03,13,10,11,01,18,07,12',
drawissue: 2018030718,
drawtime: '2018-03-07 12:01:20',
predrawtime: '2018-03-07 11:51:20',
drawcount: 17,
firstdragontiger: 1,
lastbigsmall: 0,
sumbigsmall: 1,
sumnum: 75,
sumsingledouble: 0,
fourthdragontiger: 0,
seconddragontiger: 0,
thirddragontiger: 1,
frequency: '',
lotcode: 10005,
iconurl: 'http://webapp.1680180.com/images/icon/3x/gdkl@3x.png',
shelves: 0,
groupcode: 3,
lotname: '广东快乐十分',
totalcount: 84,
servertime: '2018-03-07 11:53:50',
index: 100 } } }
引入cheerio 模块采集处理,比较复杂的数据 ,爬虫网站var express = require('express');var app = express();var request = require('request');var cheerio = require('cheerio');
app.get('/', function(req, res) {
request('http://www.zhongjiantang.com/index.php?c=detail&id=57', function(error, response, body) {
if (!error && response.statuscode == 200) {
$ = cheerio.load(body);
res.json({
cat: $('h1').text()
});
}
})
});var server = app.listen(3000, function() {
console.log('listening at 3000');
});
结合nodejs sql 的操作可以把数据插入数据库,或者其他相关操作
用nodejs做web页面,实现路由功能用npm 引入 express
创建一个web.js
var express = require('express');var app = express();// 主页输出 "hello world"app.get('/', function (req, res) {
console.log("主页 get 请求");
res.send('hello get');
})// post 请求app.post('/', function (req, res) {
console.log("主页 post 请求");
res.send('hello post');
})// /del_user 页面响应app.get('/del_user', function (req, res) {
console.log("/del_user 响应 delete 请求");
res.send('删除页面');
})// /list_user 页面 get 请求app.get('/list_user', function (req, res) {
console.log("/list_user get 请求");
res.send('用户列表页面');
})// 对页面 abcd, abxcd, ab123cd, 等响应 get 请求app.get('/ab*cd', function(req, res) {
console.log("/ab*cd get 请求");
res.send('正则匹配');
})var server = app.listen(8081, function () {
var host = server.address().address var port = server.address().port
console.log("应用实例,访问地址为 http://%s:%s", host, port)
})
我们访问127.0.0.1:8081 就可以访问响应的 页面,或者操作
数据库的相关操作的分装
点击下载封装文件
先看如何使用
db.select({ table: '数据表', where: '字段名称='查询条件',
success: function (result) {
//查询成功之后相关操作
}
,})
以select 为例
创建sql:
exports.select = function(obj){
if(!obj){
log('对象不存在'); return;
} if(!obj.hasownproperty('field')){
obj.field ="*";
} var sql = 'select '+obj.field+' from '+obj.table ; if(obj.hasownproperty('where')){
sql+=' where '+obj.where;
} if(obj.hasownproperty('limit')){
sql+=' limit '+obj.limit;
} // console.log(sql);
db_query(sql,obj);
};
执行sql:
function db_query(sql,obj){
var db_client=mysql.createclient(config.dbinfo);
db_client.query(sql,function(err,data){ if(err){ if(obj.error){ if(obj.hasownproperty('error')){
obj.error(err);
}
}else{
log('数据库出错:' + err.message);
}
}else{ if(obj.hasownproperty('success')){
obj.success(data);
}
} if(obj.hasownproperty('callback')){
obj.callback(err,data);
}
});
db_client.end();
}
如何去引用一个分装js文件
var db = require('db'),
小结:数据库操作是一个异步的过程。能大大的提高nodejs的工作效率,同时进行
分析一个异步例子
//代码示例3//注意还是那个add,精髓也在这里,随后说到function add(a, b){
return a+b;
}//lazyadd改变了,多了一个参数cbfunction lazyadd(a, cb){
return function(b){
cb(a, b);
}
}//将add传给形参cbvar result = lazyadd(1, add)// 这个时候去做一些其他的程序,等条件成立之后再去执行result = result(2); // => 3
nodejs如何通过 http把数据发送到phpfunction requestkj(number) {
var postdata = json.stringify(number); var option = {
host: 网址,
path: 地址,
method: 'post',
headers: { "content-type": 'application/json', "content-length": buffer.bytelength(postdata)
}
}; var req = http.request(option, function (res) {
res.on('data', function () {
});
res.on('end', function () {
console.log('成功前端给php');
});
});
req.write(postdata);
req.end();
settimeout(function () {
yuegengxin(number);
},1000)
}
php端接收nodejs传递的信息 public function nodejs_get_data(){
$data= json_decode(file_get_contents('php://input'),true); //对$data数据的相关操作
}
总结nodejs 接触的还是 冰山一角,要学得很多。
nidejs采集api demo
nodejs大神博客教程
以上就是nodejs基本操作方法详解的详细内容。