前言
“Node.js 是一个开源和跨平台的 JavaScript 运行时环境。 它几乎是任何类型项目的流行工具!” 这是 node.js 官网的介绍, 可以说 node 是运行在服务端的 JavaScript。node 良好的异步性能以及高并发,可以适用于服务端的搭建以及爬虫。特别是作为一个前端技术人员, 如果你想要搭建自己的服务, node 是你最好的选择。随着时间的推移,现在 Node.js 构建了许多库,比如使用 Node.js 和 Koa 构建的企业级框架和应用程序的框架——Egg.js,以及简单但又强大的 Express。
一、Express搭建
现在 express 有着成熟的技术,它也有自己的项目生成器,这里我们就只简单的搭建 express 服务, 就不使用生成器了。 我们先通过npm init -y 初始化一个项目, 然后再执行 npm install express, 一个初始的框架就已经搭成了。
我们在项目根目录下新建一个 index.js, 在里面添加如下代码:
const express = require('express') //导入express模块
const app = express()
const port = 8089
//启动监听
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`)
})
这是一个最简单的 express 服务, 我们通过 node index.js 启动这个项目文件, 然后打开 localhost:8090, 会发现打开的页面是这个样子
这是因为现在只是启动了这个项目,但是页面并没有返回任何数据, 接下来再在里面添加一些代码
const express = require('express')
const app = express()
const port = 8089
//新增
app.get('/', function (req, res) {
res.send('Hello World');
})
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`)
})
再运行 index.js,得到如下结果
到这里就需要再讲两个知识点了
二、Express基础知识
1、request 与 response对象
request 就是请求对象, response 是响应对象, 通常用 res 和 req 简写代替。req 里面有些比较常用的成员,我也列举出来了。
req.body(): 客户端返回的请求体
req.params()、req.query():客户端的请求参数, 就是拿到前端界面的请求参数然后再进行处理
req.cookies():客户端 cookies
res 就是用来做响应操作, 例如: res.send('123')发送代码, res.sendFile()发送文件
关于 res 与 req 的更多API可以参考官网进行学习
2、路由
这里的路由及配置与我们前端的路由是一样的用法,我们通过这个路由就能访问到服务里的文件。 这里的用法就是app.get()、app.post()、app.put()、app.delete(), 也就是最常见的增删改查, 平常的接口也是使用这些配合着数据库的操作。
app.get()
const express = require('express')
const app = express()
const port = 8089
app.get('/', function (req, res) {
res.send('Hello World');
})
app.get('/index', function (req, res) {
res.send('这里是index');
})
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`)
})
上述就是 app.get()使用方法, 运行后打开页面, 再进入index下面, 页面中就会出现刚刚配置的 res.send()
动态路由
平常查询的时候经常会碰到动态路由,这里的配置也是一样
app.get('/user/:id', (req, res) => {
res.send(`getuser${req.params.id}`)
})
打开浏览器输入url, 比如: user/1, 在界面中就会出现对应的结果
以上就是关于 app.get()的一些用法,都非常的简单, 其他的 post、delete 等请求我们后面在操作数据的时候再讲解。
3、代理中间件
这里我们再讲一个 express 的代理, 平常前端开发可能需要的接口不只一个, 这样就会导致跨域问题, 这个时候我们在服务端就可以统一配置。接口的代理这里需要用到一个插件express-http-proxy,还有一个解决跨域的cors插件, npm 下载一下。插件都准备好了,接下来我们模仿环境。我们需要两个服务端, 一个客户端,这里就再新建一个 demo2.js,客户端我们就使用 postman 可视化操作。
demo2.js
const express = require('express')
const proxy = require('express-http-proxy')
const app = express()
const port = 8085
app.use(require('cors')())
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`)
})
const userServiceProxy = proxy(' http://localhost:8089', {
//过滤器,指定类型的转发(可选)
filter: function (req, res) {
return req.method == 'GET';
},
//请求路径解析,转换一下路径(可选)
proxyReqPathResolver: function (req) {
console.log(req.url);
let api = req.url
return api;
},
//处理响应(可选)
userResDecorator: function (proxyRes, proxyResData, userReq, userRes) {
return proxyResData;
}})
// 代理请求
app.get('/index', (req, res, next) => {
userServiceProxy(req, res, next)
})
app.get('/', (req, res) => {
res.send('不走代理--主页')
})
这个 demo2.js 是代服务端1的代理代码, 我们配置了一个 userServiceProxy, 当用户访问这个 8085 端口的 index接口时, 会跳到之前的 8089 端口的页面, 我们运行两个服务端。
用户访问 8085 的端口, 会显示 8089 页面的内容, 代理成功。
总结
这一节我们讲述了 express 的简单应用, 主要是对路由的使用, 以及它的一个代理功能,下一节我们再讲如何通过 express 连接 mysql, 以及在服务端进行数据库的增删改查。