美文网首页
跟我一起学NodeJS(一)

跟我一起学NodeJS(一)

作者: 喜剧之王爱创作 | 来源:发表于2020-04-07 16:43 被阅读0次

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


u=3612077571,3174878136&fm=26&gp=0.jpg

接下来,我将在未来几次更新中,将自己NodeJS的学习笔记分享出来,那大家就和我一起学习吧~

NodeJS = ECMAScript + Nodejs API

所以,我们要慢慢熟悉Nodejs API
本笔记是原生NodeJS起手,我们了解了原生的用法和一些底层思想后,会带大家学习express和koa2。好了,开始吧!

入门介绍

安装node
  1. 直接官网下载(版本固定)
  2. 使用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('监听端口成功了')
  1. 引入http核心模块

  2. 引入querystring,用来处理GET请求的参数,也是NodeJS提供的一种自带方法

  3. 通过http.createServer来创建一个server,其中createServerhttp提供的API。

  4. createServer接收一个函数作为参数,这个函数有两个参数:

    • req-->请求体(request)
    • res-->响应体(response)
  5. res.end为输出

  6. 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()
})

上面代码有两点需要解释

  1. 我们采用一种类似于前端‘事件监听’的方式进行数据的监听,即,当数据有变化时,就会触发data方法,达到‘分步引入’的目的。
  2. 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处理简单的GETPOST请求,后续我们会将难度提升(接入mysql和Redis等)

相关文章

网友评论

      本文标题:跟我一起学NodeJS(一)

      本文链接:https://www.haomeiwen.com/subject/ddpnphtx.html