之前项目用php高频的采集和结算,让我们php的效率大大的降低,而且php阻塞让我们的网页无法正常的运行。所以找一种能替代php操作数据库 ,和采集的语言,并与php完美的结合。
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。 Node.js 的包管理器 npm,是全球最大的开源库生态系统。
初识nodejs
nodejs,就像我们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把数据发送到php
function 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基本操作方法详解的详细内容。更多信息请关注PHP中文网其他相关文章!

PHPSession失效的原因包括配置错误、Cookie问题和Session过期。1.配置错误:检查并设置正确的session.save_path。2.Cookie问题:确保Cookie设置正确。3.Session过期:调整session.gc_maxlifetime值以延长会话时间。

在PHP中调试会话问题的方法包括:1.检查会话是否正确启动;2.验证会话ID的传递;3.检查会话数据的存储和读取;4.查看服务器配置。通过输出会话ID和数据、查看会话文件内容等方法,可以有效诊断和解决会话相关的问题。

多次调用session_start()会导致警告信息和可能的数据覆盖。1)PHP会发出警告,提示session已启动。2)可能导致session数据意外覆盖。3)使用session_status()检查session状态,避免重复调用。

在PHP中配置会话生命周期可以通过设置session.gc_maxlifetime和session.cookie_lifetime来实现。1)session.gc_maxlifetime控制服务器端会话数据的存活时间,2)session.cookie_lifetime控制客户端cookie的生命周期,设置为0时cookie在浏览器关闭时过期。

使用数据库存储会话的主要优势包括持久性、可扩展性和安全性。1.持久性:即使服务器重启,会话数据也能保持不变。2.可扩展性:适用于分布式系统,确保会话数据在多服务器间同步。3.安全性:数据库提供加密存储,保护敏感信息。

在PHP中实现自定义会话处理可以通过实现SessionHandlerInterface接口来完成。具体步骤包括:1)创建实现SessionHandlerInterface的类,如CustomSessionHandler;2)重写接口中的方法(如open,close,read,write,destroy,gc)来定义会话数据的生命周期和存储方式;3)在PHP脚本中注册自定义会话处理器并启动会话。这样可以将数据存储在MySQL、Redis等介质中,提升性能、安全性和可扩展性。

SessionID是网络应用程序中用来跟踪用户会话状态的机制。1.它是一个随机生成的字符串,用于在用户与服务器之间的多次交互中保持用户的身份信息。2.服务器生成并通过cookie或URL参数发送给客户端,帮助在用户的多次请求中识别和关联这些请求。3.生成通常使用随机算法保证唯一性和不可预测性。4.在实际开发中,可以使用内存数据库如Redis来存储session数据,提升性能和安全性。

在无状态环境如API中管理会话可以通过使用JWT或cookies来实现。1.JWT适合无状态和可扩展性,但大数据时体积大。2.Cookies更传统且易实现,但需谨慎配置以确保安全性。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

Dreamweaver CS6
视觉化网页开发工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3 Linux新版
SublimeText3 Linux最新版

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)