• express创建服务器,以及前后端联调


    最简单的express服务器创建 

    1. // 1. 导入 express
    2. const express = require('express')
    3. // 2. 创建 web 服务器
    4. const app = express()
    5. // 4. 监听客户端的 GET 和 POST 请求,并向客户端响应具体的内容
    6. app.get('/user', (req, res) => {
    7. // 调用 express 提供的 res.send() 方法,向客户端响应一个 JSON 对象
    8. res.send({ name: 'zs', age: 20, gender: '男' })
    9. })
    10. app.post('/user', (req, res) => {
    11. // 调用 express 提供的 res.send() 方法,向客户端响应一个 文本字符串
    12. res.send('请求成功')
    13. })
    14. app.get('/', (req, res) => {
    15. // 通过 req.query 可以获取到客户端发送过来的 查询参数
    16. // 注意:默认情况下,req.query 是一个空对象
    17. console.log(req.query)
    18. res.send(req.query)
    19. })
    20. // 注意:这里的 :id 是一个动态的参数
    21. app.get('/user/:ids/:username', (req, res) => {
    22. // req.params 是动态匹配到的 URL 参数,默认也是一个空对象
    23. console.log(req.params)
    24. res.send(req.params)
    25. })
    26. // 3. 启动 web 服务器
    27. app.listen(80, () => {
    28. console.log('express server running at http://127.0.0.1')
    29. })

    静态托管页面

    1. const express = require('express')
    2. const app = express()
    3. // 在这里,调用 express.static() 方法,快速的对外提供静态资源
    4. app.use('/files', express.static('./files'))
    5. app.use(express.static('./clock'))
    6. app.listen(80, () => {
    7. console.log('express server running at http://127.0.0.1')
    8. })

    nodemon 安装: npm i -g nodemon

    修改完代码可以不用再重启服务器,直接就会实时更新

    终端输入npx nodemon ***.js

    注意:

    新建一个express服务器时,首先需要执行以下代码:

    npm init -y

    npm install express 

    npm i -g nodemon

    npm i cors

    npm i jsonwebtoken express-jwt

     express 路由模块化

    1.路由模块

    1. // 这是路由模块
    2. // 1. 导入 express
    3. const express = require('express')
    4. // 2. 创建路由对象
    5. const router = express.Router()
    6. // 3. 挂载具体的路由
    7. router.get('/user/list', (req, res) => {
    8. res.send('Get user list.')
    9. })
    10. router.post('/user/add', (req, res) => {
    11. res.send('Add new user.')
    12. })
    13. // 4. 向外导出路由对象
    14. module.exports = router

     2.使用

    1. const express = require('express')
    2. const app = express()
    3. // app.use('/files', express.static('./files'))
    4. // 1. 导入路由模块
    5. const router = require('./router.js')
    6. // 2. 注册路由模块
    7. app.use( '/api',router)
    8. // 注意: app.use() 函数的作用,就是来注册全局中间件
    9. app.listen(80, () => {
    10. console.log('http://127.0.0.1')
    11. })

    最简单的中间件(注意中间件和路由的顺序)

    1. const express = require('express')
    2. const app = express()
    3. // 定义一个最简单的中间件函数
    4. //const mw = function (req, res, next) {
    5. //console.log('这是最简单的中间件函数')
    6. // // 把流转关系,转交给下一个中间件或路由
    7. // next()
    8. //}
    9. // // 将 mw 注册为全局生效的中间件
    10. //app.use(mw)
    11. // 这是定义全局中间件的简化形式
    12. app.use((req, res, next) => {
    13. console.log('这是最简单的中间件函数')
    14. // 获取到请求到达服务器的时间
    15. const time = Date.now()
    16. // 为 req 对象,挂载自定义属性,从而把时间共享给后面的所有路由
    17. req.startTime = time
    18. next()
    19. })
    20. app.get('/', (req, res) => {
    21. console.log('调用了 / 这个路由')
    22. res.send('Home page.'+startTime)
    23. })
    24. app.get('/user', (req, res) => {
    25. console.log('调用了 /user 这个路由')
    26. res.send('User page.')
    27. })
    28. app.listen(80, () => {
    29. console.log('http://127.0.0.1')
    30. })

    前后端联调

    前端:uniapp

    1. <template>
    2. <view>
    3. <button type="default" @click="request()">发起请求</button>
    4. <view class="arrow-area">
    5. {{msg}}
    6. </view>
    7. </view>
    8. </template>
    9. <script>
    10. export default {
    11. data() {
    12. return {
    13. msg:'显示信息',
    14. "nickName": "zs",
    15. "age":20
    16. }
    17. },
    18. methods: {
    19. request(){
    20. var that = this
    21. uni.request({
    22. method:'POST',
    23. header: {
    24. // json数据的发送
    25. "content-type": "application/json",
    26. // 键值对形式数据发送
    27. // "content-type": "application/x-www-form-urlencoded",
    28. "source": "fromApp"
    29. },
    30. // dataType:JSON,
    31. url:'http://127.0.0.1/book',
    32. data:{
    33. "message" :that.msg ,
    34. "nickName": "zs",
    35. "age":20,
    36. },
    37. success:(res)=> {
    38. console.log('success')
    39. console.log(res)
    40. that.msg = res.data
    41. }
    42. })
    43. }
    44. }
    45. }
    46. </script>
    47. <style>
    48. </style>

    后端:node

    1. // 导入 express 模块
    2. const express = require('express')
    3. // 创建 express 的服务器实例
    4. const app = express()
    5. // 1. 导入解析表单数据的中间件 body-parser
    6. const parser = require('body-parser')
    7. // 2. 使用 app.use() 注册中间件,请求// "content-type": "application/x-www-form-urlencoded",数据的中间件
    8. // app.use(parser.urlencoded({ extended: false }))
    9. app.use(express.urlencoded({ extended: false }))
    10. // 请求json数据的中间件
    11. app.use(express.json())
    12. router.post('/user',(req,res)=>{
    13. body = req.body
    14. res.send({
    15. status:0,
    16. message:'post 请求成功!',
    17. data :body
    18. })
    19. console.log( req.body)
    20. })
    21. router.get('/user',(req,res)=>{
    22. const query = req.query
    23. res.send({
    24. status:0,
    25. message:'get 请求成功!',
    26. data :query
    27. })
    28. console.log(req.query)
    29. })
    30. // 调用 app.listen 方法,指定端口号并启动web服务器
    31. app.listen(80, function () {
    32. console.log('Express server running at http://127.0.0.1')
    33. })

    后端也可以模块化路由的模式:cors在哪里注册都行

     主程序:

    1. const express = require('express')
    2. const req = require('express/lib/request')
    3. const res = require('express/lib/response')
    4. const cors = require('cors')
    5. const app = express()
    6. const router =require('./router')
    7. app.use(express.json())
    8. app.use(express.urlencoded({extends:false}))
    9. const qs = require('querystring')
    10. app.use(cors())
    11. app.use(router)
    12. app.listen(80,()=>{
    13. console.log('express server running at http://127.0.0.1');
    14. })

    router.js

    1. // 这是路由模块
    2. // 1. 导入 express
    3. const { query } = require('express')
    4. const express = require('express')
    5. const cors = require('cors')
    6. // 2. 创建路由对象
    7. const router = express.Router()
    8. // 3. 挂载具体的路由
    9. router.post('/user',(req,res)=>{
    10. body = req.body
    11. res.send({
    12. status:0,
    13. message:'post 请求成功!',
    14. data :body
    15. })
    16. console.log( req.body)
    17. })
    18. router.get('/user',(req,res)=>{
    19. const query = req.query
    20. res.send({
    21. status:0,
    22. message:'get 请求成功!',
    23. data :query
    24. })
    25. console.log(req.query)
    26. })
    27. // 4. 向外导出路由对象
    28. module.exports = router

    后端可以把两种数据格式的中间件都注册了,这样需要什么样的数据格式,在前段修改即可

     前端修改header里面的代码即可:

    1. header: {
    2. // json数据的发送
    3. "content-type": "application/json",
    4. // 键值对形式数据发送
    5. // "content-type": "application/x-www-form-urlencoded",
    6. "source": "fromApp"
    7. },

    后台拿到的json数据 :

     如果改成urlencoder数据:

    注意点:

    1. req.body是post请求中用的
    2. req.query是在get请求中使用的
    3. 小程序里面显示不了json的数据,可以:that.msg =JSON.stringify(res.data) ,可以将json转成字符串形式
    4. res是后端往前端发送的,req是前端往后端发送的

  • 相关阅读:
    渗透测试-Windows密码凭证获取
    JavaScript垃圾回收机制解析
    我分析30w条数据后发现,西安新房公摊最低的竟是这里?
    【java筑基】IO流基础之文件的常见操作
    python中pickle向redis中存储数据
    Arthas 常用命令
    Go语言学习笔记——Golang 1.18新特性泛型
    Django Form实现表单使用及应用场景
    ios小程序蓝牙发送信息失败,报10004
    springcloudalibaba架构(21):MQ的简介
  • 原文地址:https://blog.csdn.net/weixin_42934729/article/details/125140259