网页抓取 加密html(五篇Node.js构建一个网站应用)

优采云 发布时间: 2022-04-15 20:31

  网页抓取 加密html(五篇Node.js构建一个网站应用)

  2021-07-25

  看了五篇关于 Node.js 的文章,你基本上可以开始构建一个 网站 应用了。首先,通过这篇文章学习一些关于构建网站的知识!

  主要是基本的东西...

  如何创建路由规则,如何提交表单并接收表单项的值,如何加密密码,如何提取页面的公共部分(相当于用户控件和母版页)等等……

  让我们一步一步开始吧^_^!…

  新建快递项目,自定义路由规则

  1.先用命令行express+ejs创建一个项目sampleEjsPre

  cd 工作目录

express -e sampleEjsPre

cd sampleEjsPre && npm install

  2.默认情况下,routes 目录下会有 index.js 和 users.js 文件。为了避免示例之外的其他麻烦,删除user.js文件

  3.打开app.js文件,删除以下两行代码

  var users = require('./routes/users');

...

app.use('/users', users);

  4.将以下代码添加到app.js文件中

  var subform = require('./routes/subform');

var usesession = require('./routes/usesession');

var usecookies = require('./routes/usecookies');

var usecrypto = require('./routes/usecrypto');

...

app.use('/subform', subform);

app.use('/usesession', usesession);

app.use('/usecookies', usecookies);

app.use('/usecrypto', usecrypto);

  通过URL访问后,根据路由规则先到哪个文件再到哪个文件的过程在上一篇文章(Nodejs学习笔记(五)---快递安装入口和模板引擎ejs)) 说了这么多,这里就不多说了!

  5.在routes目录下添加subform.js、usesession.js、usecookies.js、usecrypto.js文件,并在对应的js文件中添加如下代码

  子窗体.js

  var express = require('express');

var router = express.Router();

/* GET home page. */

router.get('/', function(req, res) {

res.render('subform', { title: '提交表单及接收参数示例' });

});

module.exports = router;

  使用session.js

  var express = require('express');

var router = express.Router();

/* GET home page. */

router.get('/', function(req, res) {

res.render('usesession', { title: '使用session示例' });

});

module.exports = router;

  使用cookies.js

  var express = require('express');

var router = express.Router();

router.get('/', function(req, res) {

res.render('usecookies', { title: '使用cookies示例' });

});

module.exports = router;

  使用crypto.js

  var express = require('express');

var router = express.Router();

router.get('/', function(req, res) {

res.render('usecrypto', { title: '加密字符串示例' });

});

module.exports = router;

  6.views目录下添加subform.ejs、usesession.ejs、usecookies.ejs、usecrypto.ejs文件,views目录下除error.ejs外的所有ejs文件添加如下代码

  

首页

如何提交表单并接收参数?

如何使用session?

如何使用cookies?

如何字符串加密?

  7.添加8000端口*敏*感*词*并在app.js中运行

  ...

app.listen(8000);

...

  运行界面如下:

  

  点击每个链接都可以正常跳转到对应的页面!这样,目录的第一步就到了!

  如何提取页面中的公共部分?

  上一步创建的 网站 中的每个页面都差不多,现在只有导航部分吗?你必须写每一页吗?当然不是,我们可以提取

  1.在views目录下新建nav.ejs文件,添加如下代码

  首页

如何提交表单并接收参数?

如何使用session?

如何使用cookies?

如何字符串加密?

  2.将views目录下的index.ejs、subform.ejs、usesession.ejs、usecookies.ejs、usecrypto.ejs修改为如下代码

  运行页面,发现和上次运行的时候并没有什么不同。采用这种方式,更有利于减少重复代码,更有利于统一布局!

  Express 提供 include 嵌入其他页面,类似于 html 嵌入其他页面

  如果你用过express2.0版本,你会发现当时并没有这个include,而是使用了一个模板文件layout.ejs来布局!

  如何提交表单和接收参数?

  如果要做一个网站应用,难免会遇到表单提交和获取参数值。让我们看看如何使用 node.js + express

  我们先建一个表单来简单模拟登录GET方式提交数据

  1.打开subform.ejs文件,修改文件代码如下:

  

  

用户名:

密码:

  2.打开subform.js我们尝试接收参数值并输出到控制台

  

  var express = require('express');

var router = express.Router();

router.get('/', function(req, res) {

var

userName = req.query.txtUserName,

userPwd = req.query.txtUserPwd,

userName2 = req.param('txtUserName'),

userPwd2 = req.param('txtUserPwd');

console.log('req.query用户名:'+userName);

console.log('req.query密码:'+userPwd);

console.log('req.param用户名:'+userName2);

console.log('req.param密码:'+userPwd2);

res.render('subform', { title: '提交表单及接收参数示例' });

});

module.exports = router;

  3.运行,并提交表单在浏览器中运行::8000/subform,输入表单项并提交,可以发现url变了

  

  可以发现,在我的表单中输入和要提交的值出现在了url中!

  我们再来看看控制台输出

  

  我们完成了GET方法提交表单并收到了值,还不错^_^!(后面会讲取值的方法和区别)

  然后在上面代码的基础上,修改form的方法,简单模拟登录POST方法提交数据

  1.首先修改subform.ejs文件中的form标签如下:

  

...

  2.在subform.js中添加代码,接收post提交,接收参数并输出到控制台

  ...

router.post('/',function(req, res){

var

userName = req.body.txtUserName,

userPwd = req.body.txtUserPwd,

userName2 = req.param('txtUserName'),

userPwd2 = req.param('txtUserPwd');

console.log('req.body用户名:'+userName);

console.log('req.body密码:'+userPwd);

console.log('req.param用户名:'+userName2);

console.log('req.param密码:'+userPwd2);

 res.render('subform', { title: '提交表单及接收参数示例' });

});

...

  3.运行,并提交表单在浏览器中运行::8000/subform,输入表单项并提交,可以发现url不会变

  

  改成post方法后,你会发现form中输入的值和要提交的值不会像get方法提交一样出现在url中!

  我们再来看看控制台输出

  

  好的,我们已经完成了表单的发布和参数的接收!

  我们回过头来看看接收值的 GET 和 POST 方法,从直接效果的角度来看

  req.query:我用来接收GET提交参数

  req.body:我用来接收 POST 提交的参数

  req.params:都可以接收

  我们看一下Express的Request部分的API:#req.params

  这里我将重点讲解req.body。Express 通过中间件 bodyParser 处理这个 post 请求。可以看到app.js中有一段代码

  ...

var bodyParser = require('body-parser');

...

app.use(bodyParser.json());

app.use(bodyParser.urlencoded());

...

  如果没有这个中间件 Express,我不知道如何处理这个请求。它通过 bodyParser 中间件分析 application/x-www-form-urlencoded 和 application/json 请求,并将变量存储在 req.body 中。只有这样我们才能得到它!

  如何加密字符串?

  当我们提交表单时,如密码等敏感信息,如果我们不对其进行加密,我们将不会认真对待用户的隐私信息。Node.js 提供加密模块 Crypto

  让我们用一个例子

  1.打开usecrypto.js,修改代码如下:

  var express = require('express');

var router = express.Router();

var crypto = require('crypto');

/* GET home page. */

router.get('/', function(req, res) {

res.render('usecrypto', { title: '加密字符串示例' });

});

router.post('/',function(req, res){

var

userName = req.body.txtUserName,

userPwd = req.body.txtUserPwd;

//生成口令的散列值

var md5 = crypto.createHash('md5'); //crypto模块功能是加密并生成各种散列

var en_upwd = md5.update(userPwd).digest('hex');

console.log('加密后的密码:'+en_upwd);

res.render('usecrypto', { title: '加密字符串示例' });

});

module.exports = router;

  2.打开usecrypto.ejs,修改代码如下

  

用户名:

密码:

  3.运行,输入并提交表单,查看控制台输出

  

  MD5加密成功!

  使用 createHash(algorithm) 方法,该方法使用给定的算法生成哈希对象

  Node.js 提供的加密模块非常强大。Hash算法提供MD5、sha1、sha256等,可根据需要使用

  update(data, [input_encoding]) 方法可以通过指定的input_encoding和传入的data数据更新hash对象。'等待)

  digest([encoding]) 方法计算数据的哈希摘要值。编码是一个可选参数。如果不通过,则返回一个缓冲区(编码可以是'hex'、'base64'等);当调用摘要方法时,哈希对象将不可用。;

  如何使用会话?

  Internet 通信协议分为两类:有状态和无状态。对web开发有一定了解的人应该都知道http是一种无状态协议。客户端向服务器发送请求以建立连接。请求响应后,连接中断,服务端不记录状态,所以服务端想

  要确定哪个客户端提交了请求,必须借助一些东西来完成,即会话和cookie。下面说说nodejs下的session和使用session吧!

  session存在于服务器端,需要cookies的协助才能完成;server端和client端通过session id建立连接(具体的session和cookies如何配合,可以自己补充一些相关知识,这里只简单提一下,不展开),否则这个文章会更复杂^_^!)

  在express中,可以使用中间件来使用session,express-session()可以存在于内存中,也可以存在于mongodb、redis等...

  更多中间件:

  下面通过一个例子来看看如何使用session(内存模式)

  示例设计思路:使用两个页面,一个登录,两个页面判断是否有这个会话,如果有,显示登录,如果没有,显示一个登录按钮,点击这个按钮记录会话

  1.首先通过npm安装中间件,打开package.json文件,在dependencies节点下添加键值对 "express-session" : "latest"

   "dependencies": {

...,

"express-session" : "latest"

}

  最新的:最新的

  2. cd 到项目根目录并执行 npm install

  

  3.打开 app.js 并添加以下代码

  var express = require('express');

var path = require('path');

var favicon = require('static-favicon');

var logger = require('morgan');

var cookieParser = require('cookie-parser');

var bodyParser = require('body-parser');

var session = require('express-session');

...

//这里传入了一个密钥加session id

app.use(cookieParser('Wilson'));

//使用靠就这个中间件

app.use(session({ secret: 'wilson'}));

...

  这些选项就不做解释了,通过上面中间件的链接,自己看看

  4.这里我以usesession和usecookies为例,修改js和ejs如下

  

  

  usesession.ejs 和 usecookies.ejs

  

用户已登录

  使用.js

  var express = require('express');

var router = express.Router();

router.get('/', function(req, res) {

if(req.session.islogin)

{

console.log('usesession:' + req.session.islogin);

res.locals.islogin = req.session.islogin;

}

res.render('usesession', { title: '使用session示例' });

});

router.post('/', function(req, res) {

req.session.islogin = 'success';

res.locals.islogin = req.session.islogin;

res.render('usesession', { title: '使用session示例' });

});

module.exports = router;

  使用cookies.js

  var express = require('express');

var router = express.Router();

router.get('/', function(req, res) {

if(req.session.islogin)

{

console.log('usecookies:' + req.session.islogin);

res.locals.islogin = req.session.islogin;

}

res.render('usecookies', { title: '使用cookies示例' });

});

router.post('/', function(req, res) {

req.session.islogin = 'success';

res.locals.islogin = req.session.islogin;

res.render('usecookies', { title: '使用cookies示例' });

});

module.exports = router;

  5.运行查看

  第一次运行时,查看两个页面,效果如下:

  

  

  6.点击登录按钮后查看这两个页面

  

  

  7.关闭浏览器再打开就可以看到这两个页面,如步骤5的截图所示

  session使用成功!

  官方示例:

  如何使用cookies?

  如果是登录,一般会使用“记录密码”或者“自动登录”功能,一般是通过cookies来完成

  cookie存在于客户端,安全性较低。通常,应存储加密信息。建议设置使用过期时间或不使用时删除。

  Express 也可以与中间件一起使用:

  老套路,通过一个例子来了解一下

  示例设计思路:在上述会话示例的基础上,登录并在usecookies部分记录cookies自动登录

  1.根据上面的会话示例修改usecookies.js

  var express = require('express');

var router = express.Router();

router.get('/', function(req, res) {

if(req.cookies.islogin)

{

console.log('usecookies-cookies:' + req.cookies.islogin);

req.session.islogin = req.cookies.islogin;

}

if(req.session.islogin)

{

console.log('usecookies:' + req.session.islogin);

res.locals.islogin = req.session.islogin;

}

res.render('usecookies', { title: '使用cookies示例' });

});

router.post('/', function(req, res) {

req.session.islogin = 'success';

res.locals.islogin = req.session.islogin;

res.cookie('islogin', 'sucess', { maxAge: 60000 });

res.render('usecookies', { title: '使用cookies示例' });

});

module.exports = router;

  2.运行访问:8000/usecookies,点击登录按钮登录成功并记录cookies

  maxAge 是过期时间,单位是毫秒,我设置的是一分钟

  3.关闭浏览器,再次访问:8000/usecookies,页面显示已登录

  4.再次关闭浏览器,一分钟后再次访问:8000/usecookies,页面不再登录,但显示登录按钮,表示cookies已过期,不会自动登录

  使用cookies也成功了!

  官方示例:

  如何清除会话和 cookie?

  清算很简单,不用举例说明。如果您有兴趣定义自己的路由规则,请尝试

  //清除cookies

res.clearCookie('islogin');

//清除session

req.session.destroy();

  写在之后

  文中提到的一些知识点,其实可以用一整篇文章来讨论。这篇文章的基本原则是看后能用;

  如果想了解原理或更相关的知识,可以花点时间去了解,或者找一些资料丰富一下。当然,您也可以留言。如果我不认为我在胡说八道,我会尽力回答^_^!

  本系列的源代码可供下载。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线