1.少写一个斜杠(比较蠢的问题)
app.get("api/jsonp",(req,res)=>{
//1.获取请求的函数的名称
const funcName = req.query.callback
//2.定义服务器端要返回的数据
const data = {
name: "Bob",
age: 18
}
//3.通过函数名称调用服务器端相应的函数 将javaScript对象data转化为json格式的字符串
const resStr = `${funcName}(${JSON.stringfy(data)})`
// 将表示服务器端返回的信息的js对象data转化为json字符串作为funcName函数的参数并且调用该函数
// 将函数返回的结果赋值给resStr
//4.把要拼接的字符串响应给客户端
res.send(resStr)
})
一开始就错了 应该是: /api/jsonp
2.配置中间件的时机问题
const express = require("express")
const app = express()
//导入路由模块 注册为全局中间件
app.use(express.urlencoded({extended:false}))
//导入路由模块
const router = require("./apiRouter")
//注册外为全局中间件
app.use(router)
app.listen(80,()=>{
console.log("server running at https://localhost:8080")
})
像这里,一定要先注册express.urlencoded()这个中间件函数 它用于解析url编码格式的请求体的数据,要先准备好解析工具 后续路由才能正确处理请求体数据
还有需要注意的一点是 在配置路由器监听的端口时 推荐传入数字类型的端口号
//推荐的做法
app.listen(80,()=>{
console.log("server running at https://localhost:8080")
})
//不推荐的做法
app.listen("80",()=>{
console.log("server running at https://localhost:8080")
})
3.注册中间件时参数传入的问题
下面用一段使用Express框架配置服务器并使用cors中间件处理跨域问题的代码引入该问题:
const express = require("express")
const app = express()
//一定要在路由配置之前引入cors中间件解决跨域问题
const cors = require("cors")
//将cors工具注册为全局中间件
app.use(cors) //这里就出现问题了
app.use(express.urlencoded({extended:false}))
//导入自定义路由模块
const router = require("./apiRouter")
/将router注册外为全局中间件 并将其挂载在/api路径下面
app.use("api",router)
app.listen(80,()=>{
console.log("server running at https://localhost:8080")
})
在注册中间件时 应该传入的是一个中间件函数(通常) 或者是一个要挂载的路径和中间件函数
有时是多个中间件或者中间件数组
很明显 cors变量是一个函数 在注册为全局中间件时应该执行该函数即:
app.use(cors())