npm install cors
安装中间件const cors = require('cors')
导入中间件//路由模块
const express = require('express')
const router = express.Router()
router.get('/get', (req, res) => {
//获取到客户端通过查询字符串发送到服务器的数据
const query = req.query
//调用res.send()方法把数据响应给客户端
res.send({
status: 0, //状态0表示成功,1表示失败
msg: 'GET请求成功!', //状态描述
data: query //需要响应给客户端的具体数据
})
})
router.post('/post', (req, res) => {
//获取客户端通过请求体发送到服务器的 URL-encoded数据
//如果要获取URL-encoded格式的请求体数据,必须配置中间件app.use(express.urlencoded({ extended: false}))
const body = req.body
//调用res.send()方法把数据响应给客户端
res.send({
status: 0, //状态0表示成功,1表示失败
msg: 'POST请求成功!', //状态描述消息
data: body //需要响应给客户端的具体数据
})
})
module.exports = router
//导入express模块
const express = require('express')
//创建express服务器实例
const app = express()
//配置解析表单数据的中间件
app.use(express.urlencoded({
extended: false }))
//一定要在路由之前配置之cors这个中间件,从而解决接口跨域的问题
const cors = require('cors')
app.use(cors())
//导入并注册路由模块
const router = require('./API')
app.use('/api', router)
//调用app.listen方法指定端口号并启动服务器
app.listen(80, () => {
console.log('Express server running at http://127.0.0.1')
})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://cdn.staticfile.net/jquery/3.7.1/jquery.min.js"></script>
</head>
<body>
<!--输入以下内容-->
<button id="btnGET">GET</button>
<button id="btnPOST">POST</button>
<script>
//测试GET接口
$('#btnGET').on('click', function () {
$.ajax({
type: 'GET',
url: 'http://127.0.0.1/api/get',
data: {
name: 'zs', age: 20 },
success: function (res) {
console.log(res)
},
})
})
//测试POST接口
$('#btnPOST').on('click', function () {
$.ajax({
type: 'POST',
url: 'http://127.0.0.1/api/get',
data: {
bookname: '区块链', author: 'thq' },
success: function (res) {
console.log(res)
},
})
})
</script>
</body>
</html>
终端运行test.js文件
然后在网页中打开html文件
点击GET和POST按钮
注意事项
res.setHeader('Access-Control-Allow-Origin', 'http://itcast.cn')
下面的字段表示允许来自任何域的请求
res.setHeader('Access-Control-Allow-Origin', '*')
res.setHeader('Access-Control-Allow-Headers', 'Conten-Type, X-Custom-Header')
//只允许POST、GET、DELETE、HEAD请求方法
res.setHeader('Access-Control-Allow-Methods', 'POST, GET, DELETE, HEAD')
//允许所有的HTTP请求方法
res.setHeader('Access-Control-Allow-Methods', '*')
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://cdn.staticfile.net/jquery/3.7.1/jquery.min.js"></script>
</head>
<body>
<!--输入以下内容-->
<button id="btnGET">GET</button>
<button id="btnPOST">POST</button>
<!--添加一个新的按钮-->
<button id="btnDelete">DELETE</button>
<script>
$(function () {
//测试GET接口
$('#btnGET').on('click', function () {
$.ajax({
type: 'GET',
url: 'http://127.0.0.1/api/get',
data: {
name: 'zs', age: 20 },
success: function (res) {
console.log(res)
},
})
})
//测试POST接口
$('#btnPOST').on('click', function () {
$.ajax({
type: 'POST',
url: 'http://127.0.0.1/api/post',
data: {
bookname: '区块链', author: 'thq' },
success: function (res) {
console.log(res)
},
})
})
//为删除按钮绑定点击事件处理函数
$('#btnDelete').on('click', function () {
$.ajax({
type: 'DELETE',
url: 'http://127.0.0.1/api/delete',
data: {
bookname: '区块链', author: 'thq' },
success: function (res) {
console.log(res)
},
})
})
})
</script>
</body>
</html>
//路由模块
const express = require('express')
const router = express.Router()
router.get('/get', (req, res) => {
//获取到客户端通过查询字符串发送到服务器的数据
const query = req.query
//调用res.send()方法把数据响应给客户端
res.send({
status: 0, //状态0表示成功,1表示失败
msg: 'GET请求成功!', //状态描述
data: query //需要响应给客户端的具体数据
})
})
router.post('/post', (req, res) => {
//获取客户端通过请求体发送到服务器的 URL-encoded数据
//如果要获取URL-encoded格式的请求体数据,必须配置中间件app.use(express.urlencoded({ extended: false}))
const body = req.body
//调用res.send()方法把数据响应给客户端
res.send({
status: 0, //状态0表示成功,1表示失败
msg: 'POST请求成功!', //状态描述消息
data: body //需要响应给客户端的具体数据
})
})
//定义DELETE接口
router.delete('/delete', (req, res) => {
res.send({
satus: 0,
msg: 'DELET请求成功',
})
})
module.exports = router
然后我们运行test.js文件启动服务器,然后打开网页,点击DELETE按钮即可看到出现了两次请求
//优先创建JSONP接口,这个接口不会被处理成CORS接口
app.get('/api/jsonp', (req, res) => {
})
//再配置CORS中间件,后续的所有接口都会被处理成CORS接口
app.use(cors())
//这是一个开启了CORS的接口
app.get('/api/get', (req, res) => {
})
app.get('/api/jsonp', (req, res) => {
//获取客户端发送过来的回调函数的名字
const funcName = req.query.callback
//得到要通过JSONP形式发送给客户端的数据
const data = {
name: 'zs', age: 22 }
//根据前两步得到的数据,拼接出一个函数调用的字符串
const scriptStr = `${
funcName}(${
JSON.stringify(data)})`
//把上一步拼接得到的字符串,响应给客户端的<script>标签进行解析执行
res.send(scriptStr)
})
//导入express模块
const express = require('express')
//创建express服务器实例
const app = express()
//配置解析表单数据的中间件
app.use(express.urlencoded({
extended: false }))
//必须在配置cors中间件之前配置JSONP的接口
app.get('/api/jsonp', (req, res) => {
//得到函数的名称
const funcName = req.query.callback
//定义要发送到客户端的数据对象
const data = {
name: 'zs', age: 22 }
//拼接出一个函数的调用
const scriptStr = `${
funcName}(${
JSON.stringify(data)})`
//把拼接的字符串响应给客户端
res.send(scriptStr)
})
//一定要在路由之前配置之cors这个中间件,从而解决接口跨域的问题
const cors = require('cors')
app.use(cors())
//导入并注册路由模块
const router = require('./API')
app.use('/api', router)
//调用app.listen方法指定端口号并启动服务器
app.listen(80, () => {
console.log('Express server running at http://127.0.0.1')
})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://cdn.staticfile.net/jquery/3.7.1/jquery.min.js"></script>
</head>
<body>
<!--输入以下内容-->
<button id="btnGET">GET</button>
<button id="btnPOST">POST</button>
<button id="btnDelete">DELETE</button>
<button id="btnJSONP">DELETE</button>
<script>
$(function () {
//测试GET接口
$('#btnGET').on('click', function () {
$.ajax({
type: 'GET',
url: 'http://127.0.0.1/api/get',
data: {
name: 'zs', age: 20 },
success: function (res) {
console.log(res)
},
})
})
//测试POST接口
$('#btnPOST').on('click', function () {
$.ajax({
type: 'POST',
url: 'http://127.0.0.1/api/post',
data: {
bookname: '区块链', author: 'thq' },
success: function (res) {
console.log(res)
},
})
})
//为删除按钮绑定点击事件处理函数
$('#btnDelete').on('click', function () {
$.ajax({
type: 'DELETE',
url: 'http://127.0.0.1/api/delete',
data: {
bookname: '区块链', author: 'thq' },
success: function (res) {
console.log(res)
},
})
})
//为JSONP按钮绑定点击事件处理函数
$('#btnJSONP').on('click', function () {
$.ajax({
type: 'GET',
url: 'http://127.0.0.1/api/jsonp',
dataType: 'jsonp',
success: function (res) {
console.log(res)
}
})
})
})
</script>
</body>
</html>
更多【学习-Express学习(四)】相关视频教程:www.yxfzedu.com