溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

node.js中怎么注冊(cè)服務(wù)器端

發(fā)布時(shí)間:2021-07-21 10:02:29 來源:億速云 閱讀:159 作者:Leah 欄目:開發(fā)技術(shù)

今天就跟大家聊聊有關(guān)node.js中怎么注冊(cè)服務(wù)器端,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

  模塊

  node.js中最強(qiáng)的莫過于“模塊化”了。各式各樣的模塊,諸如:http、https、fs…層出不窮,而且直接調(diào)用,簡(jiǎn)單便捷。

  引入方式:

  const 變量名 = require('模塊名');

  比如,本demo所用到的:

  const http=require('http')

  const url=require('url')

  const querystring=require('querystring') //“解析數(shù)據(jù)” 模塊

  const fs=require('fs')

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

  開始

  首先,因?yàn)闆]搞數(shù)據(jù)庫(kù),我們用一個(gè)對(duì)象來模擬一下:

  let user={

  admin:123456

  }

  (此代碼作用:規(guī)定必須是這種格式的存取)

  然后,我們需要和瀏覽器交互——交互即需發(fā)請(qǐng)求——請(qǐng)求在node中需用到http/https

  即我們需要寫一個(gè)服務(wù)器程序 -> http.createServer(function(response,request){}).listen(端口號(hào))

  這個(gè)函數(shù)內(nèi)置一個(gè)回調(diào)函數(shù),其接收兩個(gè)參數(shù):請(qǐng)求(request)和響應(yīng)(response)、最后還有一個(gè)listen監(jiān)聽函數(shù),負(fù)責(zé)告訴服務(wù)器“目標(biāo)是誰”;

  在其中,需要判斷請(qǐng)求方式——因?yàn)椴荒苷f登錄注冊(cè)兩種方式就放兩個(gè)服務(wù)器上是吧(你也得看人家服務(wù)器愿不愿意啊)

  //獲取數(shù)據(jù)

  let path,get,post

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

  //es6語法:解構(gòu)

  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 //因?yàn)閜ost傳參不在url展示,故其url要簡(jiǎn)便很多,直接取出即可

  //data 事件——post請(qǐng)求 請(qǐng)求數(shù)據(jù)(buffer指代二進(jìn)制數(shù)據(jù)流)

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

  arr.push(buffer)

  })

  //end事件——數(shù)據(jù)處理結(jié)束后的回調(diào)函數(shù)

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

  //Buffer.concat——依托于Buffer對(duì)象中的concat方法,將arr數(shù)組數(shù)據(jù)“拼接”起來(也可以理解為:擺脫數(shù)組形態(tài))

  //toString()——任何數(shù)據(jù)都可以字符串化

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

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

  complete()

  })

  }

  好了,get和post里都獲取到數(shù)據(jù)了,接下來要對(duì)數(shù)據(jù)進(jìn)行處理了,因?yàn)樘幚聿襟E是相同的,我們就把其放在一個(gè)函數(shù)(complete)中,再分別在get和post里調(diào)用(第7、20行)。

  等等,我們說下 buffer ——二進(jìn)制數(shù)據(jù)流

  為什么要對(duì)其進(jìn)行 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)

  它的結(jié)果是個(gè)名為Buffer的數(shù)組

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

  然后我們就可以對(duì)其 querystring轉(zhuǎn)換為對(duì)象格式 ,然后取出數(shù)據(jù)了

  API

  寫過文檔(或者看過后端寫文檔)的都知道,寫后端比較重要的就是寫一個(gè)API調(diào)用文檔——告訴前端,你需要往哪里發(fā)請(qǐng)求,需要傳什么,接收什么,字段有哪些,以什么方式。

  這里,我們規(guī)定——err為1,代表有錯(cuò);反之,代表通過。提示信息寫在msg中,通過end函數(shù)返回給頁面:

  function complete(){

  if(path=='/login'){

  res.writeHead(200,{

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

  })

  let {username,password}=get

  if(!user[username]){

  //end :只能用字符串(這里必須用stringify轉(zhuǎn)一下)

  res.end(JSON.stringify({

  err:1,

  msg:"用戶名不存在"

  }))

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

  res.end(JSON.stringify({

  err:1,

  msg:"密碼錯(cuò)誤"

  }))

  }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 //把“新增的”數(shù)據(jù)取出

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

  res.end(JSON.stringify({

  err:1,

  msg:"賬戶已存在"

  }))

  }else{

  user[username]=password

  res.end(JSON.stringify({

  err:0,

  msg:"注冊(cè)成功"

  }))

  }

  }else{

  //如果既不是登錄也不是注冊(cè)——?jiǎng)偞蜷_頁面的時(shí)候!(這一步至關(guān)重要:判斷頁面路徑是否正確)

  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");

  是一樣的效果——規(guī)范字體格式

  還有一點(diǎn)要注意的是:end函數(shù)——只接受字符串形式,故常用JSON.stringify()來轉(zhuǎn)換。

  下面把HTML代碼放上:

  (關(guān)于這個(gè)jQuery包的下載,很好玩:在命令行里輸入npm i jquery,回車,即可(前提是你得下載了node))

  用戶名:

  密碼:

  登錄

  注冊(cè)

  做完這一切,在命令行輸入:node js文件完整路徑,然后打開瀏覽器,輸入:localhost:監(jiān)聽的端口號(hào)/html文件名,即可測(cè)試

看完上述內(nèi)容,你們對(duì)node.js中怎么注冊(cè)服務(wù)器端有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI