这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天
前言
在之前的学习中,我们将JavaScript从浏览器中分离,今天让我们进一步深入nodeJs。
CommonJS规范与esMoudle规范
理解这两个规范首先要介绍什么是模块化,模块化指将一段相对完整的js代码编写在一个单独的js文件中,称之为模块,通过不同文件的引入来组合成一个完整的功能。在浏览器环境下运行的JavaScript的模块化采用esMoudle规范,即export和import语句来实现模块的导出和导入。
假设相同目录下存在两个文件a.js和b.js,那么在b.js中引入a.js采用esMoulde如下写法
a.js
import b from './b.js'
import { test } from './b.js'
b.hello()
console.log(test)
b.js
const hello = () => console.log('hello!')
export const test = 1
export default hello
其中也存在单独导出export与默认导出export default,这是浏览器支持的js模块化。
commonJs与之不同,它没有在浏览器上直接实现,最终会转换成其他的规范,但在编写时我们仍需遵守规范。 commonJS只能在nodeJs环境下使用。
require语句的使用
在commonJs规范下,我们导入模块时使用require语句,并且采用module.exports来导出需要被导入的成员。
const fs = require('fs')
module.exports = fs
其中module.exports接收一个对象,也意味着commonJs不支持单独导出。但require相比import并非只有缺点,require语句的最大特色是动态引入,即require会在执行到该语句时才去导入相关的模块,这点与被提升至文件首部的import语句有着巨大的差异,在一些涉及生命周期的特性中,require可能会有一些亮眼的表现。
通过exppress框架搭建服务器
express是nodeJs平台上一个npm包,极简快捷的服务器框架。使用了express后,使用JavaScript也能够接收ajax请求了。
express的安装
npm install express
创建一个express服务器
express导出一个构造函数,可以用于创建app对象。创建出的app对象功能强大,能够实现服务器端口的监听和数据接收等后端接口需要的功能。
const express = require('express')
const app = express()
app.listen(4000, () => {
console.log('服务器启动...')
})
数据解析
正常情况下的express接收post请求时请求对象request中的body无法收到post请求的请求体,这时我们需要借助一些中间件来解决问题。
express内置了一些中间件,如express.json()和express.urlencoded()
//post请求不添加中间件request.body得到undefined
app.use(express.json())//自动解析json数据
app.use(express.urlencoded({ extended: false }))//解析表单
编写get接口和post接口
在app上的get方法和post方法允许我们反复定义各种不同的接口从而实现在服务器运行期间能够接收post和get请求
app.get('/get', (request, response) => {
console.log(request.query)//get请求通过query获取参数
response.end()
})
app.post('/post', (request, response) => {
console.log(request.body)//post请求通过body获取参数
response.end()
})
总结
本次学习我们继续对nodeJs有了一个较为深刻的理解,甚至学会了如何编写后端接口,为js全栈开发奠定了基础。随着JavaScript的发展,JavaScript能够完成的事也会越来越多。