node.js中怎么注册服务器端
创始人
2024-12-17 16:22:09
0次

  模块

  node.js中最强的莫过于“模块化”了。各式各样的模块,诸如:http、https、fs…层出不穷,而且直接调用,简单便捷。

  引入方式:

  const 变量名 = require('模块名');

  比如,本demo所用到的:

  const http=require('http')

  const url=require('url')

  const querystring=require('querystring') //“解析数据” 模块

  const fs=require('fs')

  其中fs算是node中比较重要的模块了,只要涉及文件读取,都要用到它。。。

  开始

  首先,因为没搞数据库,我们用一个对象来模拟一下:

  let user={

  admin:123456

  }

  (此代码作用:规定必须是这种格式的存取)

  然后,我们需要和浏览器交互——交互即需发请求——请求在node中需用到http/https

  即我们需要写一个服务器程序 -> http.createServer(function(response,request){}).listen(端口号)

  这个函数内置一个回调函数,其接收两个参数:请求(request)和响应(response)、最后还有一个listen监听函数,负责告诉服务器“目标是谁”;

  在其中,需要判断请求方式——因为不能说登录注册两种方式就放两个服务器上是吧(你也得看人家服务器愿不愿意啊)

  //获取数据

  let path,get,post

  if(req.method=='GET'){

  //es6语法:解构

  let {pathname,query}=url.parse(req.url,true) //parse ——url块 的方法——解析链接(req.url,和是否解析query部分(true))

  path=pathname

  get=query

  complete()

  }else if(req.method=='POST'){

  let arr=[]

  path=req.url //因为post传参不在url展示,故其url要简便很多,直接取出即可

  //data 事件——post请求 请求数据(buffer指代二进制数据流)

  req.on('data',buffer=>{

  arr.push(buffer)

  })

  //end事件——数据处理结束后的回调函数

  req.on('end',()=>{

  //Buffer.concat——依托于Buffer对象中的concat方法,将arr数组数据“拼接”起来(也可以理解为:摆脱数组形态)

  //toString()——任何数据都可以字符串化

  //querystring——字符串解析->JSON格式

  post=querystring.parse(Buffer.concat(arr).toString())

  complete()

  })

  }

  好了,get和post里都获取到数据了,接下来要对数据进行处理了,因为处理步骤是相同的,我们就把其放在一个函数(complete)中,再分别在get和post里调用(第7、20行)。

  等等,我们说下 buffer ——二进制数据流

  为什么要对其进行 Buffer.concat 操作? 我们来看一段代码:

  let http=require('http')

  http.createServer((req,res)=>{

  let result=[]

  req.on('data',buffer=>{

  result.push(buffer)

  })

  req.on('end',()=>{

  console.log(result)

  })

  }).listen(8888)

  它的结果是个名为Buffer的数组

  而加上Buffer.concat以后,就变成了字符串形式:

  然后我们就可以对其 querystring转换为对象格式 ,然后取出数据了

  API

  写过文档(或者看过后端写文档)的都知道,写后端比较重要的就是写一个API调用文档——告诉前端,你需要往哪里发请求,需要传什么,接收什么,字段有哪些,以什么方式。

  这里,我们规定——err为1,代表有错;反之,代表通过。提示信息写在msg中,通过end函数返回给页面:

  function complete(){

  if(path=='/login'){

  res.writeHead(200,{

  "Content-Type":"text/plain;charset=utf-8"

  })

  let {username,password}=get

  if(!user[username]){

  //end :只能用字符串(这里必须用stringify转一下)

  res.end(JSON.stringify({

  err:1,

  msg:"用户名不存在"

  }))

  }else if(user[username]!=password){

  res.end(JSON.stringify({

  err:1,

  msg:"密码错误"

  }))

  }else{

  res.end(JSON.stringify({

  err:0,

  msg:"登录成功"

  }))

  }

  }else if(path=='/reg'){

  res.writeHead(200,{

  "Content-Type":"text/plain;charset=utf-8"

  })

  let {username,password}=post //把“新增的”数据取出

  if(user[username]){ // ↑ 放到user中

  res.end(JSON.stringify({

  err:1,

  msg:"账户已存在"

  }))

  }else{

  user[username]=password

  res.end(JSON.stringify({

  err:0,

  msg:"注册成功"

  }))

  }

  }else{

  //如果既不是登录也不是注册——刚打开页面的时候!(这一步至关重要:判断页面路径是否正确)

  fs.readFile(`www${path}`,(err,data)=>{

  if(err){

  res.end('404')

  }else{

  res.end(data)

  }

  })

  }

  }

  我们来分析一下:

  res.writeHead(200,{

  "Content-Type":"text/plain;charset=utf-8"

  })

  代码中这一部分和java写后端中的:

  response.setHeader("Content-type", "text/html;charset=UTF-8");

  response.setCharacterEncoding("UTF-8");

  是一样的效果——规范字体格式

  还有一点要注意的是:end函数——只接受字符串形式,故常用JSON.stringify()来转换。

  下面把HTML代码放上:

  (关于这个jQuery包的下载,很好玩:在命令行里输入npm i jquery,回车,即可(前提是你得下载了node))

  用户名:

  密码:

  登录

  注册

  做完这一切,在命令行输入:node js文件完整路径,然后打开浏览器,输入:localhost:监听的端口号/html文件名,即可测试

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...