您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關node.js中怎么注冊服務器端,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
模塊
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文件名,即可測試
看完上述內容,你們對node.js中怎么注冊服務器端有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。