随着开发技术的不断更新,NodeJS写服务端已经得到了广泛的实践,因为NodeJS和前端JS都是使用ECMAScript语法规范,所以,对于前端开发者来说,学习服务端开发,使用NodeJs的话,你将省去了去学习一门新语言的语法的时间,我们只要在前端开发和后端开发中做一个变成思想上的大转变,就可以很快学会使用NodeJS开发服务端。

接下来,我将在未来几次更新中,将自己NodeJS的学习笔记分享出来,那大家就和我一起学习吧~
NodeJS = ECMAScript + Nodejs API
所以,我们要慢慢熟悉Nodejs API哦
本笔记是原生NodeJS起手,我们了解了原生的用法和一些底层思想后,会带大家学习express和koa2。好了,开始吧!
入门介绍
安装node
- 直接官网下载(版本固定)
- 使用nvm,(可做多版本切换)
定义
- NodeJS = ECMAScript + nodejsApi
- 可以实现server端的一系列开发
模块化
nodeJS是使用commonjs
规范做模块化的,其中
- 导出-->
module.exports
//导出单个方法
module.exports = xxx//xxx为方法名
//导出多个方法
module.exports={xxx,yyy}//xxx,yyy分别为不同方法名
- 导入-->
require
//导入同一目录下单个方法
const xxx = require('./a')//xxx为导出方法的重定义
//导入同一文件下多个方法
const {xxx,yyy} = require('./a')//此种情况为a文件导出多个方法(一个对象),我们使用ES6解构的方式进行结构
//导入npm包
const _ = require('lodash')//以导入lodash为例,直接写包名即可
//导入nodejs自带的包
const http = require('http')
debuger
- 我们推荐使用VScode IDE自带的debuger进行断点调试,其调试步骤和前端使用浏览器对JS进行断点调试类似
处理http请求
处理GET请求
这里引入一个代码片段来说明
const http = require('http')
const querystring = require('querystring')
const server = http.createServer((req, res) => {
console.log(req.method,'method')
const url = req.url
console.log(url,'url')
req.query=querystring.parse(url.split('?')[1])
console.log(req.query,'req.query')
res.end(
JSON.stringify(req.query)
)
})
server.listen(8000)
console.log('监听端口成功了')
-
引入
http
核心模块 -
引入
querystring
,用来处理GET请求的参数,也是NodeJS提供的一种自带方法 -
通过
http.createServer
来创建一个server,其中createServer
为http
提供的API。 -
createServer
接收一个函数作为参数,这个函数有两个参数:- req-->请求体(request)
- res-->响应体(response)
-
res.end
为输出 -
server.listen
为要监听的端口
处理POST请求
这里引入代码片段来说明
const server = http.createServer((req, res) => {
if(req.method === 'POST') {
// req 数据格式
console.log('req content-type: ', req.headers['content-type'])
//接受数据
let postData = ''
req.on('data', chunk => {
postData += chunk.toString()
})
req.on('end', () => {
console.log('postData: ', postData)
res.end('hello world')
})
}
})
server.listen(8000)
console.log('监听端口成功了')
与GET
请求不同的是,我们需要在创建的server函数里面判断其请求方式是否为POST
,然后对其进行特殊处理
- 请求头中的
content-type
,是由我们发出POST
请求时决定的,一般为json
- 我们采用数据流的方式对数据做处理,原因为
POST
请求发送的数据体量较大,所以我们会通过一种'数据管道'的方式,对其进行'分步引入',具体的代码为
req.on('data', chunk => {
postData += chunk.toString()
})
上面代码有两点需要解释
- 我们采用一种类似于前端‘事件监听’的方式进行数据的监听,即,当数据有变化时,就会触发
data
方法,达到‘分步引入’的目的。 -
chunk
是一种二进制数据流,所以我们需要使用toString
方法将其转为字符串
- 数据处理结束也是采用一种类似于前端“事件监听”的形式进行监听,即:当请求数据传递完成时,触发
end
方法。
剩下的东西就和GET
请求的处理一样了。
注意:POST
请求不能像GET
请求那样用浏览器模拟测试,我们需要手写ajax
或者使用"postman",这里我们推荐postman,这样可以避免其中的一些跨域之类的东西
综合小实例
const http = require('http')
const querystring = require('querystring')
const server = http.createServer((req, res) => {
const method = req.method
const url = req.url
const path = url.split('?')[0]
const query= querystring.parse(url.split('?')[1])
res.setHeader('content-type', 'application/json')
const resData = {
method,
url,
path,
query
}
if (method === 'GET') {
res.end(
JSON.stringify(resData)
)
}
if (method === 'POST') {
let postData = ""
req.on('data', chunk => {
postData += chunk.toString()
})
req.on('end', () => {
resData.postData = postData
res.end(
JSON.stringify(resData)
)
})
}
})
server.listen(8000)
console.log('监听端口成功了')
这里我们讲了怎么用NodeJS处理简单的GET
和POST
请求,后续我们会将难度提升(接入mysql和Redis等)
网友评论