Express是一个基于Node.js开发出来的专门用来创建Web服务器的框架。
它的作用与Node.js的内置http模块类似,或者说它就是基于node.js内置http模块来开发的,它与http模块的关系类似于Jquery与WebAPI的关系,但它比http模块在功能上更为高效和强大,也更方便开发者使用。
使用Express可以开发Web网站或者提供API接口的服务器。
使用Node.js做开发,少不了安装一些第三方的开发包。之前我使用的网络有代理,一直安装不上第三方包,昨天安装了一个无线网卡,使用手机流量直接上外网,安装就顺畅了。
REM 切换npm下载包的镜像源为淘宝的npm服务器。
npm config set registry=https://registry.npm.taobao.org/
REM 查看镜像源设置:
npm config get registry
新建一个目录,在该目录下(cmd命令窗口)执行初始化命令:
npm init -y
即可在该目录下生成一个package.json文件,然后再下载其他的第三方包。
Express的官网地址:http://www.expressjs.com.cn。
安装:npm i [email protected]
js程序文件是通过node程序来加载、启动运行的,如果更改程序文件内容,需要我们人为中断运行的程序,然后再次调用node来执行新的程序。
而nodemon(第三方的开发包)可以帮助我们来去掉这些麻烦,使用它来运行我们写的程序后,我们更改了程序内容,保存后nodemon会自动中断旧的程序后重启最新的程序,这样就保证了最新的内容被执行。
安装:npm i -g nodemon
1、做静态资源发布的网站
//导入express
const express=require('express')
//创建web服务器
const app=express()
//发布当前目录下OASoft目录的所有内容,通过http://127.0.0.1:9019/download/来访问
//download相当于虚拟目录名称
app.use('/download',express.static('./OASoft'))
//发布当前目录下workdocs目录的所有内容,通过http://127.0.0.1:9019/doc/来访问
//doc相当于虚拟目录名称
app.use('/doc',express.static('./workdocs'))
//启动web服务器
app.listen(9019,()={
console.log('webserver 正在运行......http://127.0.0.1:9019')
})
//运行:
//nodemon useExpress.js
2、做动态内容发布的服务器
类似于IIS和Apache的功能,发布网站同时监听来自客户端浏览器的各种请求、响应并返回具体的内容。
客户端的请求多种多样,在服务器端都有对应的函数来处理,这种关系称之为映射,在Express中称之为路由。
主文件ZTB_Main.js代码:
//导入express模块
const express=require('express')
//创建Web服务器
const app=express()
//导入路由模块
//自定义模块必须加上路径名,文件后缀可以省略,内置模块和下载的第三方模块不需要加
const ZTB_router=require('./ZTB_router.js')
//注册全局路由模块
app.use('/ZTB',ZTB_router)
//启动web服务器
app.listen(9019,()=>{
console.log('Web服务器正在运行......')
})
路由文件ZTB_router.js代码:
//导入express
var express=require('express')
//创建路由对象
var router=express.Router()
router.get('/add',function(req,res){
//处理增加
//返回结果
console.log('增加操作')
res.send('增加操作')
})
router.post('/del',function(req,res){
//处理删除
//返回结果
console.log('删除操作')
res.send('删除操作')
})
//对外导出路由对象
module.exports=router
说明:
1、路由很多,单独写在一个文件里,对外共享路由对象即可,具体步骤:
① 创建一个单独的路由处理模块的.js文件;
② 导入express并创建路由对象;
③ 在路由对象上加载具体的路由及处理函数;
④ 对外共享路由对象。
2、路由及处理格式:
app.get(‘/’,function(req,res){
res.send(‘这是来自主页的get请求’)
})
app.post(‘/’,function(req,res){
res.send(‘这是来自主页的psot请求’)
})
//等价于
app.get(‘/’,( req , res ) => {
res.send(‘这是来自主页的get请求’)
})
app.post(‘/’,( req , res ) => {
res.send(‘这是来自主页的psot请求’)
})
3、主程序引入路由文件,使用app.use注册路由模块即可监听来自网页的请求;
app.use('/ZTB',ZTB_router),ZTB即为访问前缀。
4、使用ApiPost来测试请求及返回的结果,分别是:
① http://127.0.0.1:9019/ZTB/add (get请求)
② http://127.0.0.1:9019/ZTB/del (post请求)