nodejs 模块开发,nodejs中的模块以及作用

  nodejs 模块开发,nodejs中的模块以及作用

  

一、模块化

  模块化作为一种现代设计方法,这个概念最早源于制造业。如今,这一理念已经被各行各业所衍生和应用,软件开发中也大量采用了模块化思想。

  所谓模块化思想,就是将一个大程序按照其功能划分成若干小模块,每个小程序模块完成一个特定的功能,并将所有的模块按照一定的方式组装成一个整体,完成整个系统所需的功能的一种编程方法。【推荐:node.js视频教程】

  

(一)、为什么需要模块化

  为什么您需要模块化:

  随着程序复杂度的增加,编写的代码越多,文件中的代码就越长,很难维护。(将执行特定功能的代码分组到不同的文件中,以便每个文件包含相对较少的代码)

  当JavaScript有复杂的依赖关系时,很容易有些变量的属性或方法被覆盖或重写,导致变量污染。这是因为js没有命名空间,不像其他语言,可以有效避免重名问题。

  有希望JavaScript私有的变量。

  解决问题的模块化思维:

  可维护性:每个模块都是相互独立定义的。模块需要尽可能脱离外部,以便我们独立维护和改造。维护一个模块比修改整个世界的逻辑判断要好得多。

  命名冲突:为了避免JavaScript中的全局污染,我们使用函数作用域以模块化的方式构建命名空间,避免命名冲突。

  文件依赖:一个函数可能依赖于一个或多个其他文件。在使用它的时候,除了介绍它本身,我们还需要考虑依赖文件。通过模块化,我们只需要引入文件,不需要考虑文件依赖(模块化可以帮助我们解决文件依赖的问题)。

  可重用性:虽然粘贴复制很简单,但是要考虑我们以后的维护和迭代。

  

(二)、什么是Nodejs模块

  ,将常用函数作为模块提取到单独的js文件中。默认情况下,外部无法访问模块中的方法或属性。如果要在外部访问这些属性和方法,必须通过exports和module.exports在模块中公开它们,并在需要使用它们的地方通过require()引入它们。

  //示例//导出语法

  //sum.js

  exports.sum=function(a,b){

  返回a b;

  }

  //main.js

  var m=require(。/sum’);

  var num=m.sum(10,20);

  console . log(num);

  //modules.exports语法示例

  //sum.js

  函数sum(a,b){

  返回a b;

  }

  module.exports=sum

  //main.js

  var sum=require(。/sum’);

  sum(10,20);//30CommonJS规定:

  在每个模块中,模块变量代表当前模块

  变量是一个对象,它的导出属性(即module.exports)是一个外部接口。

  加载一个模块实际上就是加载模块。require()方法用于加载模块。

  

(三)、nodejs中的模块分类与加载方式

  在Node.js中,根据模块来源的不同,模块分为3类,即:

  内置模块(内置模块是Node.js官方提供的,比如fs、path、http等。)

  自定义模块(每个。用户创建的js文件是自定义模块)

  第三方模块(包)(第三方开发的模块不是官方内置模块,也不是自定义模块,需要下载后才能使用)

  //1.不需要指定加载内置模块的路径。

  var http=require( http );

  //2.加载用户的自定义模块

  var sum=require(。/sum . js’);

  //3.加载第三方模块

  const MD5=require( MD5 );

(四)、模块作用域

  类似于函数作用域。自定义模块中定义的成员(如变量和方法)只能在当前模块中访问。这种模块级访问限制称为模块范围。模块作用域的好处:防止了全局变量污染的问题

二、npm与包

  

(一)、包的介绍

   Node.js中的第三方模块也叫包。该软件包由第三方个人或团队开发,所有人都可以免费使用。Node.js的内置模块只提供了一些底层的API,导致基于内置模块的项目开发效率低下。

  该包基于内置模块进行封装,提供了更先进、更便捷的API,大大提高了开发效率。国外有一家IT公司叫npm,Inc,这家公司有一个非常著名的网站:https://www.npmjs.com/,是全球最大的包共享平台。我们可以使用这个包管理工具npm来管理包。这个包管理工具随Node.js安装包一起安装在用户的计算机上,请检查其版本。Npm -v

(二)、npm的使用

   npm init初始化,生成package.json文件,记录项目的信息,记录包的信息Npm安装包名npm i包名下载包,将npm i包名放入node_modules文件夹- save npm i包名-S(开发环境)npm i包名- save-dev npm i包名-D(生产环境)npm列表列出当前目录下安装的包@1安装指定版本npm i包名-g安装全局包npm

  npconfig set registry=3359registry.npm.taobao.org安装nrm:

  $ npm i nrm -g检查nrm中内置的几个npm源的地址:

  $ nrm ls的结果如下:

  NPM-https://registry.npmjs.org/

  cnpm-http://r.cnpmjs.org/

  *淘宝-https://registry.npm.taobao.org/

  新泽西州https://registry.nodejitsu.com/

  红色高棉-http://registry.mirror.cqupt.edu.cn/

  https://skimdb.npmjs.com/registry/先生

  Edunepm-http://registry.enpmjs.org/移交nrm:

  $ nrm使用npm查看当前镜像源:

  Npm配置获取注册

(三)、全局安装nrm nodemon

  淘宝NPM图片是一个完整的npmjs.org图片。可以用它代替正式版(只读)。同步频率目前为10分钟,以保证尽可能与官方服务同步。

  可以使用淘宝定制的cnpm (gzip压缩支持)命令行工具,而不是默认的npm:

  m install-g cnpm-registry=https://registry.npm.taobao.org安装包

  cn install[模块名称]

(四)、淘宝cnpm工具

  

三、路由

  

express

   $ NPM快速安装-保存

一、下载与安装

  路由的定义由以下结构组成:

  App。方法(路径,处理程序)名称描述appapp是一个express实例。METHODMETHOD用于指定要匹配的HTTP请求方法。PATHPATH是服务器的路径。Handler是路由匹配时需要执行的处理程序(回调函数)。路由路径和请求方法一起定义了请求的端点,可以是字符串、字符串模式和正则表达式。

  app.get(/),function (req,res) {

  RES . send( root )})app . get(/about ,function (req,res) {

  RES . send( about )})app . get(/random . text ,function (req,res) {

  Res.send(random.text)})使用字符串模式的路由路径示例:

  app.get(/ab? cd ,函数(请求,结果){

  res.send(ab?cd) //abcd,acd})app.get(/ab/:id ,function (req,res) {

  RES . send( ab/:id )})app . get(/ab CD ,function (req,res) {

  Res.send(ab cd) //b可以重复一次或多次}) app.get (/ab * CD ,function (req,res) {

  Res.send(ab*cd) //任意书写ab和cd之间的任意字符})app.get(/ab(cd)?e ,函数(请求,结果){

  res.send(ab(cd)?E)})可以为请求处理提供多个回调函数,其行为类似于中间件。

  app.get(/example/b ,function (req,res,next) {

  console.log(响应将由下一个函数发送.)

  next()},function (req,res) {

  res.send(来自B的问候!)})var cb0=function (req,res,next) {

  console.log(CB0 )

  next()}var cb1=function (req,res,next) {

  console.log(CB1 )

  next()}var cb2=function (req,res) {

  res.send(你好,来自C!)}app.get(/example/c ,[cb0,cb1,cb2])var cb0=function (req,res,next) {

  console.log(CB0 )

  next()}var cb1=function (req,res,next) {

  console.log(CB1 )

  next()}app.get(/example/d ,[cb0,cb1],function (req,res,next) {

  console.log(响应将由下一个函数发送.)

  next()},function (req,res) {

  res.send(你好,来自D!)})

二、路由

  

三、中间件

   //通用中间件var express=require( express )var app=express()app . use(function(req,res,next) {

  console.log(Time:,Date.now())

  Next()})//应用中间件app.use(/login ,function (req,res,next) {

  Console.log (time:,date.now ()}):

1.应用级中间件

  路由器级中间件的工作方式和应用级中间件一样,只是绑定了express。路由器()。

  var路由器=express。router()var express=require( express )var app=express()var router=express。router()router . use(function(req,res,next) {

  console.log(Time:,Date.now())

  next()})router.get(/user/:id ,function (req,res,next) {

  console.log(请求URL:,req.originalUrl)

  next()},function (req,res,next) {

  console.log(请求类型:,请求方法)

  next()})

2.路由级中间件

   app . use(function(err,req,res,next) {

  控制台.错误(err.stack)

  res.status(404)。发送(“有东西坏了!”)})

3.错误处理中间件

   express.static提供静态资源,如HTML文件、图片等。

  Express.json使用json有效负载解析传入的请求。注意:它可用于Express 4.16.0

  //应用级中间件,获取后json参数app . use(express . JSON());Express.urlencoded使用URL编码的负载解析传入的请求。注意:它可用于Express 4.16.0

  //应用级中间件,获取后表单参数app . use(express . urlencoded({ extended:false });

4.内置中间件

  

5.第三方中间件

   req.query是一个可以获取客户端get请求的查询字符串的对象。默认值是{}。req.body包含在请求正文中提交的数据键值对。默认未定义,使用解析中间件express.json()时,express . urlencoded()

四、获取请求参数

  

五、静态资源托管

   express . static内置中间件函数语法:

  express.static (root,[options]) root参数指定提供静态资源的根目录。

语法:

  例如,公共目录中的图片、CSS文件和JavaScript文件可以通过以下代码供公众访问:

  App.use(express.static(public ))现在,您可以访问公共目录中的所有文件:

  http://本地主机:3000/images/kitten.jpg

  http://localhost:3000/CSS/style . CSS

  http://本地主机:3000/js/app.js

  http://本地主机:3000/images/bg.png

  3358 localhost:3000/hello . html

静态资源示例:

  如果要使用多个静态资源目录,请多次调用express.static中间件函数:

  app.use(express.static(public ))

  当app . use(express.static( uploads ))访问一个静态资源文件时,express . static的中间件函数会按照添加目录的顺序找到需要的文件。

  

多个静态资源目录:

   express.static中间件功能可以为一些静态资源服务创建一个虚拟路径前缀(这个路径实际上并不存在于文件系统中)。请指定静态目录的挂载路径,如下所示:

  App.use (/static ,express.static (public ))现在可以通过前缀为/static的地址访问public目录中的文件。

  http://本地主机:3000/static/images/kitten.jpg

  http://localhost:3000/static/CSS/style . CSS

  http://本地主机:3000/static/js/app.js

  http://本地主机:3000/static/images/bg.png

  3358 localhost:3000/static/hello . html

虚拟路径:(非得添加static,没有意义)

  

六、模板引擎

  做好静态页面。动态特效提供前端代码给后端,后端要删除静态html和里面的虚假数据,通过模板动态生成html内容【外链图片传递失败,源站可能有防盗链机制,建议保存图片直接上传(IMG-JL 70 ca 3p-1658387147221)(C:\ users \ 1933 \ desktop \前端全栈\课件\前后交互\imgs\ server

  

一、.服务端渲染 SSR

  做好静态页面,json模拟动态效果,ajax动态创建页面真实界面数据,前后联调【外链图片传递失败,源站可能有防盗链机制,建议保存图片直接上传(IMG-pxrcidw 2-1658387147223)(C:\ users \ 11933 \ desktop \)

  

二、前后端分离,BSR

  

三、模板引擎

  与Express一起使用的一些流行的模板引擎是Pug、Mustache和EJS。默认情况下,Express application generator使用Pug,但是它也支持其他几种。

  需要在应用程序中进行以下设置,以允许Express呈现模板引擎:

  视图,放置模板文件的目录。示例:app.set(views ,)。/views’)。视图引擎,要使用的模板引擎。例如,要使用PUG模板引擎:app.set(视图引擎, Pug )。

Express模板引擎

  路由呈现的模板并将呈现的HTML字符串发送到客户端。

  Res.render (view [,locales] [,callback]) view:一个字符串,view是要渲染的模板文件的文件路径。Locales:其属性定义视图的局部变量的对象。app.get(/),function (req,res) {

  res.render(index ,{ title:嘿,消息:你好!})

  }):

在路由中渲染模板

  :

四、ejs模板引擎的使用

   NPM安装ejs:

安装ejs

  :

在express配置ejs模板引擎

  在app.js中添加以下代码,配置Express使用ejs模板引擎。

  app.set(views ,path.join(__dirname, views ));//设置模板存放位置app.set(视图引擎, ejs );

使用ejs模板引擎

  在app.js中添加以下代码,以配置Express使用ejs模板引擎。并将模板后缀指定为html。

  app.set(views ,path.join(__dirname, views ));//设置模板存放位置app.set(视图引擎, html );app.engine(html ,require(ejs )。render file);//使用ejs模板引擎解析html

设置模板后缀为html

   %=% output标签

  %-%输出html标签(浏览器将解析html)

  % #%注释标签

  %%过程控制标签(写if,else,for)

  %-include (user/show ,{user: user})%导入常用模板内容

ejs模板语法

  :

MVC框架:

  :

JSON:

  对象结构:对象结构在JSON中表示为{}括起来的内容。数据为{key: value,key: value,…}的键-值对结构。其中,key必须是用英文双引号包裹的字符串,value的数据类型可以是数字、字符串、布尔、null、数组、对象六种类型。

  {

  名称: zs ,

  年龄:20,

  性别:男性,

  Hobby: [Eat , Sleep]}数组结构:数组结构在JSON中表示为[]括起来的内容。数据结构为["Java "," JavaScript ",30,true …]。数组中的数据类型可以是数字、字符串、布尔、空、数组和对象。

  [ 100,200,300 ][ true,false,null ][ { name: zs , age: 20},{ name: ls , age :30 }][ AAA , bbb , ccc ],[ 1,2,3 ] ] :

一、概念:

  属性名必须用双引号括起来。字符串类型的值必须用双引号括起来。JSON中不允许使用单引号。注释不能用JSON编写。JSON的最外层必须是对象或数组格式。未定义的or函数不能用作JSON的值。JSON的作用:在计算机和网络之间存储和传输数据。JSON的本质:用字符串表示Javascript对象数据或数组数据

二、JSON的两种结构

   JSON是JS对象的字符串表示。它使用文本来表示JS对象的信息,JS对象本质上是一个字符串。

  //这是一个对象var obj={a: Hello ,b: World}//这是一个json字符串,其本质是一个字符串varjson= {a: hello , b: world}:

三、JSON语法的注意事项

  实现JSON字符串到JS对象的转换,使用JSON.parse()方法将JS对象转换成JSON字符串,使用JSON.stringify()方法

四、JSON和JS对象的关系

  :010

五、JSON和JS对象的互转

   建议保存图片直接上传(IMG-g 502 i2rt-1658387147224)(C:\ users \ 1933 \ desktop \前端全栈\课件\前后交互\imgs\请求消息组件. png)]

  请求行:由请求方法(get、post)、URL (/login?)和HTTP协议版本,用空格分隔。请求头:用于描述客户端的基本信息,以便通知服务器关于客户端的信息。请求的头部由多行键/值对组成,每行的键和值由英文冒号分隔。【外链图像传输失败,源站可能有防盗链机制。建议保存图片直接上传(IMG-IMFA 8U4Y-1658387147225)(C:\ users \ 1933 \ desktop \前端全栈\课件\前后交互\imgs\ request header field.png)]

  空行:最后一个请求头字段后面是一个空行,通知服务器请求头到此结束。请求中的空行,用于分隔请求头和请求体。请求体:存储在请求体中的数据是通过POST提交给服务器的数据。只有POST请求有请求体,但是GET请求没有请求体!

HTTP

  

一、概念

  【外链图像传输失败,源站可能有防盗链机制。建议保存图片直接上传(img-n 0 rfsha 8-1658387147225)(C:\ users \ 11933 \ desktop \前端全栈\课件\前后台)

  行:由HTTP协议版本、状态码、状态码描述文本三部分组成,用空格隔开;响应头:用于描述服务器的基本信息。响应头由多行键/值对组成,每行的键和值由英文冒号分隔。空行:在最后一个响应头字段结束后,将跟随一个空行来通知客户端响应头已经结束。响应中的空行,用于分隔响应标头和响应正文。响应体:存储在中的是服务器响应客户端的资源内容。

二、请求(请求报文)

  [外部链接图像传输失败,源站可能有防盗链机制。建议保存图片直接上传(IMG-VwQMQRAP-1658387147226)(C:\ users \ 1933 \ desktop \前端全栈\课件\前后交互\imgs\http requested。

  

请求消息的组成

  [外链图像传输失败,源站可能有防盗链机制。建议保存图片直接上传(IMG-28 yrkp 8M-1658387147227)(C:\ users \ 1933 \ desktop \前端全栈\课件\前后交互\ IMGS \

  

三、响应(响应报文)

  

响应消息的组成:

  

四、HTTP请求方法

   XML是指可扩展标记语言。HTML超文本标记语言XML旨在传输和存储数据。XML和HTML类似,只是HTML是预定义的标签,而XML没有预定义的标签,都是自定义标签来表示一些数据。{“书名”:“三体”,“作者”:“zs”,“价格”:30}“书

  标题三体/标题

  作者刘/作者

  价格30.00/price/book

五、响应的状态码

  

Ajax:

  无需刷新页面即可与服务器通信,允许根据用户事件更新部分页面内容

一、概念

  没有浏览历史无法回滚。有一个交叉问题。同源策略:协议、域名、端口号SEO不友好

二、XML

   get方法,请求参数//1.//2.初始化,设置请求方法和URL xhr.open (get , http://127.0.0.1: 3000/server?username=zs password=1234’);//3.发送xhr . send();//4.绑定事件并处理服务器返回的结果。readstatexhr的属性状态为0,1,2,3,4x HR . onreadystatechange=function(){

  //服务器返回的结果

  if(xhr.readyState==4){

  //确定响应的状态代码

  if(xhr.status==200){

  //行、头和正文

  console . log(xhr . status);

  console . log(xhr . status text);

  console . log(xhr . response);

  console . log(xhr . getallresponseheaders());

  }

  }}

三、特点

  

优点:

  使用步骤:

  运行以下命令安装crypto js:NPM I crypto-js in/log in . js,import crypto-js:const crypto=require( crypto-js )for plain text encryption with ASE://encrypt var a=crypto . AES . encrypt( ABC , key ). tostring .///secret key//decrypt var b=crypto . AES . decrypt(a, key )。tostring(crypto . enc . utf8);//根据UTF8代码解析原字符串

缺点:

  步骤:

  安装joi包为表单中携带的每个数据项定义校验规则:NPM Install joi Install @ escook/express-joi中间件实现自动校验表单数据的功能:NPM I @ escook/express-joi new/schema/log in . js用户信息校验规则模块:constjoi=require (joi)/*。

  * string()值必须是字符串。

  * alphanum()值只能是包含a-zA-Z0-9的字符串。

  * min(长度)最小长度

  *最大(长度)最大长度

  * required()值是必需的,不能未定义。

  *模式(正则表达式)值必须符合正则表达式的规则。

  *///用户名constusername=joi.string()的认证规则。必选();//密码验证规则const password=joi.string()。模式(/[\ s] {6,12} $/)。必选();//登录表单的认证规则对象exports.login_schema={

  //表示req.body中的数据需要验证。

  正文:{

  用户名,

  密码,

  },}修改/router/admin/login.js: //1中的代码。中间件const express joi=require( @ escook/express-joi )//2。导入所需的验证规则对象const {login _ schema}=require(././) //3登录函数router.post (/,expressjoi (login _ schema),(req,RES)={ }];在index.js的全局错误级中间件中,捕捉验证失败的错误,并将验证失败的结果返回给客户端:const joi=require( joi )//error middleware app . use(function(err,req,res,next) {

  //数据验证失败。

  if(err joi的实例。ValidationError)返回RES . send(err);

  //未知错误

  Res.send(err)})

四、发送请求

   HTTP协议是以ASCII码传输,基于TCP/IP协议的应用层规范。标准的HTTP请求分为三个部分:状态行、请求头和消息体。协议中规定POST提交的数据必须放在消息的实体体中,但是协议没有规定数据必须使用什么编码方法Content-Type。

  根据服务器的请求头中的Content-Type字段,我们可以知道请求中的消息体是如何编码的,然后解析消息体。所以当谈到POST的数据提交方案时,它包括两个部分:消息体的内容类型和编码方法。Content-Type的四个值分别代表四种方式,如下所示:

  方式一:application/x-www-form-urlencoded浏览器的原生表单form,如果没有设置enctype属性,那么最终会以application/x-www-form-urlencoded的形式提交数据。内容类型被指定为application/x-www-form-urlencoded。提交的数据采用key=valkey=val的方式编码,key和val都是URL转码。例如,在服务器端PHP中,可以使用$_POST[key]来获取值。

  方式二:multipart/form-data常见的帖子数据提交方式。该方法支持文件上传,但是表单的enctyped必须设置为等于该值。使用multipart/form-data方法将生成一个边界来划分不同的字段。为了避免与文本重复,边界是一个长的随机拼接的字符串。则Content-Type指示数据由多部分/形式数据编码,并包含在该请求的边界值中。消息体以- boundary-结尾。

  方式三:application/json由于JSON规范的流行,现在越来越多的开发者使用application/json的Content-Type作为响应头。用来告诉服务器消息体是一个序列化的JSON字符串。除了较低版本的IE,各大浏览器都原生支持json.stringify,服务器端语言也有处理json的函数。JSON可以格式化和支持比键值对复杂得多的结构化数据。普通键值对中的值只能是字符串,而使用JSON,键值对可以重复嵌套。

  方式四:text/xml它是一种远程调用规范,使用HTTP作为传输协议,使用XML作为编码方法。但后来很少用了。可能十几年前,json出来之前,数据是交互对接的。

  总之,application/x-www-form-urlencoded和multipart/form-data都是浏览器支持的,并且应用广泛。application/json是一个流行的新趋势。

  

项目:

   Install multer pm I Multer Import Multer const Multer=require( Multer )配置存储Multer接收到的文件的文件夹、存储图片的名称//上传文件的存储路径以及文件名const storage=Multer . disk storage({

  目标:path.join (_ _ dirname,./static/uploads ),//确定上传文件的物理位置

  Filename: function (req,file,CB){//自定义设置文件的名称,根据上传时间的时间戳命名。

  let type=file . original name . split( . )[1]

  cb(null,` ${file.fieldname}-${Date.now()。toString(16)}。${type} `)

  }})将此配置应用于multer实例const upload=multer({ storage });在需要接收文件的路由中应用upload.single(“文件”)中间件(1)。该文件是前端提交表单时表单的字段名。(2).upload是multer中顶层构造函数生成的实例。一般思维:什么是multer?Multer是Express官方推出的中间件,用于处理node.js前端以multipart/form-data请求的数据。注意:Multer不会处理任何非多部分/表单数据表单数据。

  原理:Multer实例的Single (# # )是一个方法。当这个方法作为中间件放在某个路由上。主体对象和一个或多个文件对象将被添加到express的请求对象中。body对象包含表单的文本字段信息,file或files对象包含由对象表单上传的文件信息。下图是req.file的样子。当前客户端请求后台接口。在匹配当前路由时,首先通过这个multer中间件,它会从前端解析文件,在上面步骤3的配置文件解析后将文件保存在文件夹中,在上面步骤3的配置文件解析后将名称重命名为文件名。同时,一个文件对象将在请求时被挂载。这个文件对象是当前上传文件的信息。我们可以通过req.file.filename获取重命名后的文件名,然后将文件名保存到数据库中。如果前端要访问之前上传的图片,后台只需要获取数据库中的文件名,然后映射到我们请求的路径,在public的静态资源下请求存储这些文件的文件夹。

  Multer是一个中间件。我建议把这个中间件写成一个单独的文件。最后,公开已配置的multer实例,并将其作为中间件应用于需要它的路由中。可以快速处理前端发来的文件。而不是每个文件都写一次。也更符合我们模块化编程的思路。下图显示了我的multer文件的配置。

  

一、对密码进行加密处理

  [外部链接图像传输失败,源站可能有防盗链机制。建议保存图片直接上传(IMG-9d 1 vzmyl-1658387147228)(C:\ users \ 1933 \ desktop \前端全栈\课件\前后交互\imgs\ rich

  

二、表单校验规则

  使用:

  textarea id= demo style= display:none;/textarealayui.use([layedit],function(){

  Layedit.build(demo)})基于Layedit的方法:

  方法描述var index=layedit.build (id,options)用于构建编辑器索引的核心方法:即该方法返回的索引参数id:实例元素(一般为textarea)的id值参数options:编辑器的可配置项,下面将进一步描述,layedit.set(options)设置编辑器的全局属性,即上述构建方法的options layedit . get content(index),并获取编辑器的内容参数index:即, 执行layedit.build返回的值layedit.getText(index)参数编辑器获取的纯文本内容索引:同上layedit.sync(index)用于将编辑器内容同步到textarea(一般用于异步提交)参数索引:同上layedit.getSelection(index)获取编辑器选择的文本参数索引:同上编辑器属性设置:

  属性描述toolArray重新定义了编辑器工具栏,例如:tool: [link , unlink , face] Hidetoolarray不显示编辑器工具栏,一般用于隐藏默认配置工具barheightNumber设置编辑器的初始高度uploadImageObject设置图片上传接口,例如:上传图片:{URL:/upload/,type: post}富文本编辑器工具栏:

  let richtextInex=layedit . build( rich text ,{

  工具:[

  Strong //Bold

  ,斜体//斜体

  ,下划线//下划线

  ,删除//删除线

  , //分割线

  ,左//左对齐

  ,居中//居中对齐

  ,右//右对齐

  ,图像//插入图片

  ],

  upload image:{ URL:/uploadrichtext ,键入: POST}

  })

三、四种常见的POST提交数据方式

  (一),会话简介

  会话是记录客户状态的另一种机制。区别在于Cookie存储在客户端浏览器中,而会话存储在服务器上。会议的目的:

  会话在服务器端运行。当客户端第一次访问服务器时,可以保存客户端的登录信息。

  当客户访问其他页面时,可以判断其登录状态并给出提示,相当于登录拦截。

  Session可以结合Redis或者数据库进行持久化操作,并且在服务器挂机的时候不会造成一些客户信息(购物车)。

  失落。

  (2)会议的工作流程

  当浏览器访问服务器并发送第一个请求时,服务器端将创建一个会话对象,生成一个类似于

  Key,value,然后将key(cookie)返回给浏览器(客户端)。浏览器下次访问时将携带密钥(cookie ),

  查找相应的会话(值)。客户信息保存在进程中。

  (三)、Cookie和Session的区别:

  Cookie存储在客户端的浏览器中,会话数据放在服务器上。

  Cookies不太安全。还有人可以分析本地存储的cookie,欺骗cookie。出于安全原因,应该使用会话。

  会话将在服务器上保存一段时间。当访问数量增加时,它将占用您的服务器的性能。为了降低服务器的性能,应该使用COOKIE。

  单个cookie保存的数据不能超过4K,许多浏览器限制一个站点最多保存20个cookie。

  (4)快速会话的使用

  设置-会话:

  Npm快速安装-会话介绍快速安装-会话:

  var session=require(" express-session ");设置公文提供的中间件:

  app.use(会话({

  秘密:“键盘猫”,

  是的,

  save initialized:true

  }))使用:

  设置值req.session.username=张三;

  获取值req . session . username express-session的公共参数:

  1.name——cookie的名称(原始属性名是key)。(默认为: connect.sid)2。存储会话存储实例3。secret-使用它来签署会话cookies以防止篡改4。cookie会话cookie设置(默认值:{path:/,http only: true,Secure: false,maxage: null}) 5 .genid-生成新会话id的函数(默认使用uid2库)6。rolling-对每个请求强制设置一个cookie,这将重置cookie的过期时间(默认值:false)7。重新保存-强制保存会话,即使它没有改变(默认:真)8。代理-设置安全cookies时信任反向代理(通过“x-x-forwarded-proto”头)。当设置为真时,

  将使用“x-x-forwarded-proto”报头。当设置为false时,将忽略所有标题。如果未设置此属性,将使用Express的信任代理。9.save initialized-强制存储未初始化的会话。当创建新会话且未设置任何属性或值时,它在

  未初始化状态。在设置cookie之前,有助于登录验证,减轻服务器的存储压力,权限控制。(默认值:true)10。unset-控制是否取消req.session(例如,通过删除或将其值设置为null)。这可以使会话保持express-session的常用方法:1。Session.destroy():删除会话,并在检测到客户端关闭时调用它。2.Session.reload():当会话被修改时,刷新会话。3.Session.regenerate():初始化现有会话。4.Session.save():保存会话。用例://配置中间件app.use(会话({

  secret:‘这是string key’,//可以随便写。String类型的字符串,用作服务器生成的会话的签名。

  Name:session_id ,/*默认情况下,保存在本地cookie中的名称可以不设置*/

  Resave: false,/*强制保存会话,即使它没有更改。默认值为true。建议设置为false。*/

  save initialized:true,//strong制存储未初始化的会话。默认值为true。建议将其设置为true。

  cookie: {

  MaxAge:5000 /*到期时间*/

  },/*安全https是访问cookie的唯一方式*/*/

  //设置到期时间,例如30分钟。只要访问页面,30分钟不活动就会过期。

  Rolling:true //对每个请求强制设置cookie,这将重置cookie的过期时间(默认值:false)}):

四、multer

  form对象属性:属性描述action接收请求URLelements表单中的所有控件元素设置长度表单控件的数量enctype编码类型示例:enct

  ype=“multipart/form-data”name表单元素名称Form 对象方法:方法描述reset()把表单的所有输入元素重置为它们的默认值。submit()提交表单。Form 对象事件:事件描述onreset在重置表单元素之前调用。onsubmit在提交表单之前调用。表单控件的属性:属性描述value获取和设置值disabled获取或设置表单控件是否禁用值为true或 falsetype读取表单控件的类型form所在表单元素对象readOnly控件只读属性 Boolean 不能更改只能复制和读取name获取与设置name字段名表单控件的事件:事件描述onblur当失去焦点的时候onfocus当获取焦点的时候onchange当内容改变并失去焦点的时候oninput在用户输入时触发表单控件的方法:方法描述focus()获得焦点blur()失去焦点select()选择文本控件中的所有文本内容以上就是总结Node.js模块开发及常用技巧分享的详细内容,更多请关注我们其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: