当前位置: 首页 > news >正文

佳木斯市网站建设_网站建设公司_ASP.NET_seo优化

网站必须要求备案吗,做会员体系的网站,青州网站建设,网站开发的上市公司有哪些数据库 代码下载 数据库(database)是用来组织、存储和管理数据的仓库。常见的数据库有如下几个: MySQL 数据库(目前使用最广泛、流行度最高的开源免费数据库;Community Enterprise)Oracle 数据库(收费)SQL Server 数据库(收费)Mongodb 数据库(Community Enterprise) MySQ…数据库 代码下载 数据库(database)是用来组织、存储和管理数据的仓库。常见的数据库有如下几个: MySQL 数据库(目前使用最广泛、流行度最高的开源免费数据库;Community Enterprise)Oracle 数据库(收费)SQL Server 数据库(收费)Mongodb 数据库(Community Enterprise) MySQL、Oracle、SQL Server 属于传统型数据库(又叫做:关系型数据库 或 SQL 数据库)这三者的 设计理念相同用法比较类似。而 Mongodb 属于新型数据库(又叫做:非关系型数据库 或 NoSQL 数据库)它在一定程度上弥补了传统型 数据库的缺陷。 在传统型数据库中数据的组织结构分为数据库(database)、数据表(table)、数据行(row)、字段(field)这 4 大部分组成。库、表、行、字段的关系 在实际项目开发中一般情况下每个项目都对应独立的数据库。不同的数据要存储到数据库的不同表中例如: 用户数据存储到 users 表中图书数据存储到 books 表中。每个表中具体存储哪些信息由字段来决定例如: 可以为 users 表设计 id、username、password 这 3 个字段。表中的行代表每一条具体的数据。 对于开发人员来说需要安装 MySQL Server 和 MySQL Workbench 这两个软件来满足开发的需要 MySQL Server:专门用来提供数据存储和服务的软件。MySQL Workbench:可视化的 MySQL 管理工具通过它可以方便的操作存储在 MySQL Server 中的数据。 管理数据库 略 在node中操作 MySQL 安装操作 MySQL 数据库的第三方模块(mysql) npm i mysql通过 mysql 模块连接到 MySQL 数据库 // 配置 mysql 模块 const mysql require(mysql); const db mysql.createPool({host: localhost,port: 3306,user: root,password: admin123,database: my_db_01 });于是可以调用 db.query() 函数指定要执行的 SQL 语句通过回调函数拿到执行的结果来测试 mysql 模块能否正常工作。 通过 mysql 模块执行 SQL 语句 // 插入数据 db.query(insert into users (username, password) values (?, ?), [王五, ww], function(error, result) {if (error) return console.log(error.message);if (result.affectedRows 1) console.log(插入数据成功); });// 便捷方式插入数据 db.query(insert into users set ?, {username: 赵六, password: zl}, function(error, result) {if (error) return console.log(error.message);if (result.affectedRows 1) console.log(便捷方式插入数据成功); });// 更新数据 db.query(update users set username?, password? where id?, [李白, lb, 1], function(error, result) {if (error) return console.log(error.message);if (result.affectedRows 1) console.log(更新数据成功); });// 更新数据的便捷方式 const user { id: 4, username: 王唯, password: ww }; db.query(update users set ? where id?, [user, user.id], function(error, result) {if (error) return console.log(error.message);if (result.affectedRows 1) console.log(便捷方式更新数据成功); })// 删除数据 db.query(delete from users where id?, 3, function(error, result) {if (error) return console.log(error.message);if (result.affectedRows 1) console.log(删除数据成功); });// 查询所有数据 db.query(select * from users, (error, result) {if (error) return console.log(error.message);console.log(result); });标记删除使用 DELETE 语句会把真正的把数据从表中删除掉。为了保险起见推荐使用标记删除的形式来模拟删除的动作。 所谓的标记删除就是在表中设置类似于 status 这样的状态字段来标记当前这条数据是否被删除。 当用户执行了删除的动作时并没有执行 DELETE 语句把数据删除掉而是执行了 UPDATE 语句将这条数据对应 的 status 字段标记为删除即可 // 标记删除 db.query(update users set status? where id?, [1, 5], function(error, result) {if (error) console.log(error.message);if (result) console.log(标记删除数据成功); });前后端身份认证 Web 开发模式 目前主流的 Web 开发模式有两种分别是: 1、基于服务端渲染的传统 Web 开发模式2、基于前后端分离的新型 Web 开发模式。 服务端渲染的概念: 服务器发送给客户端的 HTML 页面是在服务器通过字符串的拼接动态生成的。因此客户端不需要使用 Ajax 这样的技术额外请求页面的数据。 优点: 前端耗时少。因为服务器端负责动态生成 HTML 内容浏览器只需要直接渲染页面即可。尤其是移动端更省电。有利于SEO。因为服务器端响应的是完整的 HTML 页面内容所以爬虫更容易爬取获得信息更有利于 SEO。 缺点: 占用服务器端资源。即服务器端完成 HTML 页面内容的拼接如果请求较多会对服务器造成一定的访问压力。不利于前后端分离开发效率低。使用服务器端渲染则无法进行分工合作尤其对于前端复杂度高的项目不利于 项目高效开发。 前后端分离的概念: 前后端分离的开发模式依赖于 Ajax 技术的广泛应用。简而言之前后端分离的 Web 开发模式就是后端只负责提供 API 接口前端使用 Ajax 调用接口的开发模式。 优点: 开发体验好。前端专注于 UI 页面的开发后端专注于api 的开发且前端有更多的选择性。用户体验好。Ajax 技术的广泛应用极大的提高了用户的体验可以轻松实现页面的局部刷新。减轻了服务器端的渲染压力。因为页面最终是在每个用户的浏览器中生成的。 缺点: 不利于 SEO。因为完整的 HTML 页面需要在客户端动态拼接完成所以爬虫对无法爬取页面的有效信息。(解决方 案:利用 Vue、React 等前端框架的 SSR (server side render)技术能够很好的解决 SEO 问题!) 具体使用何种开发模式并不是绝对的为了同时兼顾了首页的渲染速度和前后端分离的开发效率一些网站采用了 首屏服务器端渲染 其他页面前后端分离的开发模式。 比如企业级网站主要功能是展示而没有复杂的交互并且需要良好的 SEO则这时就需要使用服务器端渲染。而类似后台管理项目交互性比较强不需要考虑 SEO那么就可以使用前后端分离的开发模式。 前后端的身份认证 身份认证(Authentication)又称“身份验证”、“鉴权”是指通过一定的手段完成对用户身份的确认。 身份认证的目的是为了确认当前所声称为某种身份的用户确实是所声称的用户。例如你去找快递员取快递你要怎么证明这份快递是你的。 对于服务端渲染和前后端分离这两种开发模式来说分别有着不同的身份认证方案: 服务端渲染推荐使用 Session 认证机制前后端分离推荐使用 JWT 认证机制 Session 认证机制 了解 HTTP 协议的无状态性是进一步学习 Session 认证机制的必要前提。HTTP 协议的无状态性指的是客户端的每次 HTTP 请求都是独立的连续多个请求之间没有直接的关系服务器不会主动保留每次 HTTP 请求的状态。 Cookie 是存储在用户浏览器中的一段不超过 4 KB 的字符串。它由一个名称(Name)、一个值(Value)和其它几个用于控制 Cookie 有效期、安全性、使用范围的可选属性组成。不同域名下的 Cookie 各自独立每当客户端发起请求时会自动把当前域名下所有未过期的 Cookie 一同发送到服务器。 Cookie的几大特性: 自动发送域名独立过期时限4KB限制 客户端第一次请求服务器的时候服务器通过响应头的形式向客户端发送一个身份认证的 Cookie客户端会自动将 Cookie 保存在浏览器中。随后当客户端浏览器每次请求服务器的时候浏览器会自动将身份认证相关的 Cookie通过请求头的形式发送给 服务器服务器即可验明客户端的身份。 由于 Cookie 是存储在浏览器中的而且浏览器也提供了读写 Cookie 的 API因此 Cookie 很容易被伪造不具有安全性。因此不建议服务器将重要的隐私数据通过 Cookie 的形式发送给浏览器。注意: 千万不要使用 Cookie 存储重要且隐私的数据!比如用户的身份信息、密码等。 在 Express 中使用 Session 认证 安装 express-session 中间件 npm install express-session配置 express-session 中间件express-session 中间件安装成功后需要通过 app.use() 来注册 session 中间件 // 导入模块 const express require(express); const session require(express-session);const app express(); // 配置中间件 app.use(session({secret: keyword: myKeyword, //可以为任意字符串resave: false, // 固定写法saveUninitialized: true // 固定写法 }));向 session 中存数据当 express-session 中间件配置成功后即可通过 req.session 来访问和使用 session 对象从而存储用户的关键信息: app.post(/api/login, function(req, res) {if (req.body.username ! zs req.body.password ! 123456) {return res.send({ status: 1, message: 登录失败 });}// 将用户信息、登录状态存储到session中req.session.user { username: req.body.username };req.session.islogin true;res.send({ status: 0, message: 登录成功 }); });从 session 中取数据可以直接从 req.session 对象上获取之前存储的数据 app.get(/api/username, function(req, res) {if (!req.session.islogin) {return res.send({ status: 1, message: 请求失败 });}res.send({ status: 0, username: req.session.username, message: 请求成功 }); });清空 session调用 req.session.destroy() 函数即可清空服务器保存的 session 信息 app.post(/api/logout, function(req, res) {// 清空当前客户端 session 信息req.session.destroy();res.send({ status: 0, message: 退出成功 }); });JWT 认证机制 Session 认证机制需要配合 Cookie 才能实现。由于 Cookie 默认不支持跨域访问所以当涉及到前端跨域请求后端接 口的时候需要做很多额外的配置才能实现跨域 Session 认证。注意: 当前端请求后端接口不存在跨域问题的时候推荐使用 Session 身份认证机制。当前端需要跨域请求后端接口的时候不推荐使用 Session 身份认证机制推荐使用 JWT 认证机制。 JWT(英文全称:JSON Web Token)是目前最流行的跨域认证解决方案。用户的信息通过 Token 字符串的形式保存在客户端浏览器中。服务器通过还原 Token 字符串的形式来认证用户的身份。 JWT 通常由三部分组成分别是 Header(头部)、Payload(有效荷载)、Signature(签名)。 三者之间使用英文的“.”分隔格式如下: Header.Payload.SignatureJWT 字符串的示例: eyJhbciOiJIUZI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXN1cm5hbwUi0iJhZG1pbiIsInBhc3N3b3JkIjoiIiwibm|ja25 hbwUi0iLms6X1t7T1t7QiLCJ1bWFpbCI6Im5pYmFiYUBpdGNhc3QuY24iLCJ1c2VyX3BpYy]6IiIsImlhdCI6MTU30DAzNjY4Miw iZXhwIjoxNTc4MDcyNjgyfQ.wq7GqCxJPK-EA8LNrtMG0411KdZ3359KBL3XeuBxuIJWT 的三个组成部分从前到后分别是 Header、Payload、Signature。其中: Payload 部分才是真正的用户信息它是用户信息经过加密之后生成的字符串。Header 和 Signature 是安全性相关的部分只是为了保证 Token 的安全性。 客户端收到服务器返回的 JWT 之后通常会将它储存在 localStorage 或 sessionStorage 中。此后客户端每次与服务器通信都要带上这个 JWT 的字符串从而进行身份认证。推荐的做法是把 JWT 放在 HTTP 请求头的 Authorization 字段中格式如下: Authorization: Bearer token在 Express 中使用 JWT 安装 JWT 相关的包运行如下命令安装如下两个 JWT 相关的包 npm install jsonwebtoken express-jwtjsonwebtoken 用于生成 JWT 字符串express-jwt 用于将 JWT 字符串解析还原成 JSON 对象 导入 JWT 相关的包使用 require() 函数分别导入 JWT 相关的两个包: // 导入生成 JWT 字符串的包 const jwt require(jsonwebtoken); // 导入将 JWT 字符串还原成 JSON 对象的包 var {expressjwt: expressJWT} require(express-jwt);定义 secret 密钥为了保证 JWT 字符串的安全性防止 JWT 字符串在网络传输过程中被别人破解我们需要专门定义一个用于加密和解密 的 secret 密钥: 当生成 JWT 字符串的时候需要使用 secret 密钥对用户的信息进行加密最终得到加密好的 JWT 字符串当把 JWT 字符串解析还原成 JSON 对象的时候需要使用 secret 密钥进行解密 // 定义秘钥 const secretKey abc123ABC!#;在登录成功后生成 JWT 字符串调用 jsonwebtoken 包提供的 sign() 方法将用户的信息加密成 JWT 字符串响应给客户端: app.post(/api/login, function(req, res) {if (req.body.username zs req.body.password 123456) {// jwt.sign() 方法生成 JWT 字符串。并通过 token 属性发送给客户端// 参数1用户的信息对象// 参数2加密的秘钥// 参数3配置对象可以配置当前 token 的有效期// 记住千万不要把密码加密到 token 字符中const token jwt.sign({ username: req.body.username }, secretKey, { expiresIn: 2m});res.send({status: 0,token: token,message: 登录成功})} else {res.send({status: 1,message: 登录失败})} });将 JWT 字符串还原为 JSON 对象 客户端每次在访问那些有权限接口的时候都需要主动通过请求头中的 Authorization 字段将 Token 字符串发 送到服务器进行身份认证。此时服务器可以通过 express-jwt 这个中间件自动将客户端发送过来的 Token 解析还原成 JSON 对象: // 注册将 JWT 字符串解析还原成 JSON 对象的中间件 // 注意只要配置成功了 express-jwt 这个中间件就可以把解析出来的用户信息挂载到 req.user 属性上 // use(expressJWT({ secret: secretKey, algorithms: [HS256] }) 用来解析 token 的中间件 // unless({ path: [/^\/api\//] }) 指定哪些接口不需要访问权限 app.use(expressJWT({ secret: secretKey, algorithms: [HS256] }).unless({ path: [/^\/api\//] }))使用 req.auth 获取用户信息当 express-jwt 这个中间件配置成功之后即可在那些有权限的接口中使用 req.auth 对象来访问从 JWT 字符串 中解析出来的用户信息了示例代码如下: app.get(/my/info, function(req, res) {console.log(req.auth);res.send({status: 0,userinfo: req.auth,message: 请求成功}); });捕获解析 JWT 失败后产生的错误当使用 express-jwt 解析 Token 字符串时如果客户端发送过来的 Token 字符串过期或不合法会产生一个解析失败 的错误影响项目的正常运行。我们可以通过 Express 的错误中间件捕获这个错误并进行相关的处理: // 使用全局错误处理中间件捕获解析 JWT 失败后产生的错误 app.use(function(err, req, res, next) {console.log(err, req, res);// err.name UnauthorizedError 的错误是由 token 解析失败导致的if (err.name UnauthorizedError) {res.send({status: 2,message: 无效的token});} else {res.send({status: 3,message: 未知错误});} });
http://www.ihoyoo.com/news/50027.html

相关文章:

  • 做购物网站收费标准建设娱乐网站的要求
  • 东台市住房和建设局网站wordpress信息导出
  • 云南网站建设500东莞网站建设排名 南城
  • 成都网站建设方案优化服务器中安装网站
  • wordpress点击图片直接相册浏览利用小说网站做本站优化
  • 重庆企业站seowordpress 调用logo
  • 北京网站建设方案策划如何在阿里云上建设网站
  • 网站开发的工作职责wordpress怎么下载文件
  • 做网站付费流程怎么做8代码网站
  • 建设银行激活社保卡网站做桌面端还是网站
  • 番禺做网站哪家好网站建设网站排名怎么做
  • 网站开发建设步骤佛山企业手机网站建设
  • 一般网站用什么做的用html制作网页代码
  • 成品网站是什么意思可视化编辑建站平台
  • 扬州市住房和城乡建设局网站五个常见的电子商务网站
  • 网站图片设置4:3青岛公司logo设计
  • 利用虚拟主机建设网站的实验报告金蝶财务软件官网报价
  • 上海企业网站制作报价加强网站的建设工作
  • 定制搭建网站安阳市城乡建设规划局网站
  • 网站备案手机号码网站源码官网
  • 网站运营一月多少钱邯郸网络名称
  • 十大网页制作工具网站怎么做优化百度能搜索到
  • 近几年的网络营销案例郴州优化公司
  • 福州网站制作最好的设计师平台网站
  • 广西做网站的公司wordpress免费字体
  • 网站建设需求文章网站分站作用
  • 设计做网站网站做联盟还赚钱吗
  • 网站后台不能排版网站和网店区别
  • php程序员网站开发招聘.net 门户网站
  • 大同网站建设哪家好哪些网站可以接点私活做的