|
|
|
|
|
//1.导入express
|
|
|
|
|
|
const express = require('express');
|
|
|
|
|
|
|
|
|
|
|
|
//2.创建web服务器
|
|
|
|
|
|
const app = express();
|
|
|
|
|
|
//const cors = require(‘cors’)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//3. 启动服务器
|
|
|
|
|
|
app.listen(8081, () => {
|
|
|
|
|
|
console.log('express server running at http://127.0.0.1:8081');
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
//app.use(cors())
|
|
|
|
|
|
|
|
|
|
|
|
//4
|
|
|
|
|
|
//4.监听客户端的 GET 和 POST 请求,并向客户端响应具体的内容
|
|
|
|
|
|
|
|
|
|
|
|
// 2.Express 路由
|
|
|
|
|
|
// 在 Express 中,路由指的是客户端的请求与服务器处理函数之间的映射关系。
|
|
|
|
|
|
//
|
|
|
|
|
|
// 2.1 Express路由组成
|
|
|
|
|
|
// Express 中的路由分 3 部分组成,分别是请求的类型、请求的 URL 地址、处理函数
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app.get('/user', (req, res) => {
|
|
|
|
|
|
//调用 express 提供的 res.send() 方法,向客户端响应一个文本字符串
|
|
|
|
|
|
res.send({ name: 'zs', age: 20, gender: '男' })
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
app.post('/userpost', (req, res) => {
|
|
|
|
|
|
res.send('请求成功')
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
app.get('/age', (req, res) => {
|
|
|
|
|
|
//调用 express 提供的 res.send() 方法,向客户端响应一个文本字符串
|
|
|
|
|
|
console.log(req.query);
|
|
|
|
|
|
res.send(req.query)
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
app.get('/user/:id/:username', (req, res) => {
|
|
|
|
|
|
res.send(req.params)
|
|
|
|
|
|
console.log(req.params);
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
app.use(express.static('public'))
|
|
|
|
|
|
app.use(express.static('files'))
|
|
|
|
|
|
|
|
|
|
|
|
// 挂载路径前缀
|
|
|
|
|
|
// 如果希望在托管的静态资源访问路径之前,挂载路径前缀,则可以使用如下的方式:
|
|
|
|
|
|
app.use('/pub', express.static('pub'))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 2.3 模块化路由
|
|
|
|
|
|
// 为了方便对路由进行模块化的管理,Express 不建议将路由直接挂载到 app 上,
|
|
|
|
|
|
// 而是推荐将路由抽离为单独的模块。
|
|
|
|
|
|
|
|
|
|
|
|
//1.导入路由模块
|
|
|
|
|
|
const router = require('./router.js')
|
|
|
|
|
|
//2. 注册路由模块
|
|
|
|
|
|
app.use(router)
|
|
|
|
|
|
|
|
|
|
|
|
// 导入路由模块
|
|
|
|
|
|
const apiRouter = require('./apiRouter.js')
|
|
|
|
|
|
// 把路由模块,注册到 app 上
|
|
|
|
|
|
app.use('/api', apiRouter)
|
|
|
|
|
|
|
|
|
|
|
|
// 7. CORS 跨域资源共享
|
|
|
|
|
|
// 解决接口跨域问题的方案主要有两种:
|
|
|
|
|
|
//
|
|
|
|
|
|
// CORS(主流的解决方案,推荐使用)
|
|
|
|
|
|
// JSONP(有缺陷的解决方案:只支持 GET 请求)
|
|
|
|
|
|
// 7.1 使用 cors 中间件解决跨域问题
|
|
|
|
|
|
// cors 是 Express 的一个第三方中间件。通过安装和配置 cors 中间件,可以很方便地解决跨域问题。
|
|
|
|
|
|
// 使用步骤分为如下 3 步:
|
|
|
|
|
|
//
|
|
|
|
|
|
// 运行 npm install cors 安装中间件
|
|
|
|
|
|
// 使用 const cors = require(‘cors’) 导入中间件
|
|
|
|
|
|
// 在路由之前调用 app.use(cors()) 配置中间件
|
|
|
|
|
|
// CORS (Cross-Origin Resource Sharing,跨域资源共享)由一系列 HTTP 响应头组成,这些 HTTP 响应头决定浏览器是否阻止前端 JS 代码跨域获取资源。
|
|
|
|
|
|
//
|
|
|
|
|
|
// 浏览器的同源安全策略默认会阻止网页“跨域”获取资源。但如果接口服务器配置了 CORS 相关的 HTTP 响应头,就可以解除浏览器端的跨域访问限制。
|
|
|
|
|
|
//
|
|
|
|
|
|
//https://blog.csdn.net/weixin_45691995/article/details/139706869
|
|
|
|
|
|
//https://zhuanlan.zhihu.com/p/669087801
|
|
|
|
|
|
//https://www.oracle.com/database/technologies/instant-client/macos-intel-x86-downloads.html#ic_osx_inst
|
|
|
|
|
|
|
|
|
|
|
|
//https://www.runoob.com/nodejs/nodejs-build-app.html
|
|
|
|
|
|
|
|
|
|
|
|
//https://clwy.cn/courses/fullstack-node
|
|
|
|
|
|
//https://clwy.cn/chapters/fullstack-node-sequelize
|
|
|
|
|
|
|
|
|
|
|
|
//https://apifox.com/
|