今天就跟大家聊聊有关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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。