cometang前端技术博客 cometang前端技术博客
首页
  • html5
  • JavaScript
  • ES6
  • Vue
  • 微信小程序
  • react
  • react上手教程
  • 前端框架
  • 大神之路
  • 面试汇总
  • Node
  • PHP
  • Go语言
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

cometang

永远相信技术的力量
首页
  • html5
  • JavaScript
  • ES6
  • Vue
  • 微信小程序
  • react
  • react上手教程
  • 前端框架
  • 大神之路
  • 面试汇总
  • Node
  • PHP
  • Go语言
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • NodeJS

    • express搭建后端服务
      • 前置环境
      • express 环境安装
      • 路由模块-routes
      • 1.post 发送的json数据-req.body
      • 2.get 请求的url 携带参数 获取键值对
      • 3.get 请求的url 携带参数 获取id
      • 4.获取文件-保存文件方式
  • go语言

  • 后端
  • NodeJS
cometang
2022-05-28
目录

express搭建后端服务

# 环境准备

# 前置环境

  • nodejs +npm+yarn 底层环境
  • phpstudy【启动mysql本地服务】
  • navicat 【图形化数据库界面】

# express 环境安装

  • 安装express 脚手架 工具 快速搭建项目
yarn global add express-generator
1

或

npm install express-generator -g 
1
express --version   #查看是否安装成功
1

# express 项目初始化

express 项目名 
1
yarn  或者 npm install    #安装所有三方包
1
yarn start   #启动项目 启动后默认打开3000端口
1

图2

# 项目的目录结构分析

shop
├── bin
│   └── www
├── public      			#静态资源文件
│   ├── images
│   ├── javascripts
│   └── stylesheets
│       └── style.css
├── routes                  #路由 模块
│   ├── index.js
│   └── users.js
├── views					#页面
│   ├── error.jade
│   ├── index.jade
│   └── layout.jade
├── app.js                  #主模块  入口文件
└── package.json            #项目依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 开发准备配置

  • 代码热更新插件 nodemon
npm install nodemon -g   
nodemon  -v
1
2
  • 修改package.json 的启动命令
"scripts": {
 "start": "nodemon ./bin/www"
},
1
2
3

# 配置端口号

在app.js 入口文件中 暴露app对象的前面 增加端口号配置

//端口号配置
app.listen(8099,()=>{
  console.log('后端服务启动成功');
  console.log('服务地址为:http://localhost:8099');
})
1
2
3
4
5

图2

# 接口开发

# 路由模块-routes

请求地址的跳转路径 是通过路由文件 routes 中进行加载实现的

路由文件主要管理 各个接口请求的跳转和处理

  • 添加自己的路由 实现第一个接口的调用

在routes 中 创建新的路由模块 goods.js

var express = require('express');
var router = express.Router();

router.get('/',(req,res,next)=>{
    //req 请求的数据 request 
    //res 响应的数据  response 
    //next  调用:next()  作用:只要当前功能没被结束,跳转到下一个相同路由的内部
    res.send('我是商品列表')
})

module.exports = router;
1
2
3
4
5
6
7
8
9
10
11

在主模块 app.js 中导入 创建的路由 并通过app.use方法 注册该模块

const goodsRouter = require('./routes/goods')
app.use('/goods', goodsRouter);
1
2

验证是否成功

浏览器访问 localhost:3000/goods/
1

图2

# 数据库接入准备

项目中安装三方包 mysql

yarn add mysql 
1

启动数据库的本地服务

  • phpstudy 开启mysql
  • navicat 查看数据的数据--并完成数据库的创建和数据表的设计
#创建的数据库名: demo 
#数据库用户:root   
#数据库密码:root 
1
2
3
#goods表
1
id name price img desc
1 vivo X Note 6999 vivo X Note 12GB+512GB 璨夜黑 7英寸2K+ E5超感宽幕 3D大面积指纹 旗舰骁龙8 Gen1 5G 大屏
2 Apple iPhone 13 5999 Apple iPhone 13 (A2634) 128GB 星光色 支持移动联通电信5G 双卡双待
3 vivo iQOO 3200 vivo iQOO 8 12GB+256GB 传奇版 120W闪充 骁龙888 独立显示芯片 KPL官方赛事电竞

# 数据库接入

  • 创建数据库连接 的文件 db.js
routes/db/db.js
1
var mysql = require('mysql'); // 引入mysql第三方模块 yarn add mysql
// 创建连接对象
var connection = mysql.createConnection({
  host: 'localhost', // 地址 本地 http://127.0.0.1
  user: 'root', // 用户名
  password: 'root', // 密码
  database: 'demo' // 要连接的数据库的名字
});
connection.connect(); // 调用连接方法
// 暴露模块
module.exports = connection;
1
2
3
4
5
6
7
8
9
10
11
  • 在需要使用的路由模块中 导入db.js
const db = require('./db/db');
//获取到商品列表
router.get('/', function (req, res, next) {
  // 写好sql 语句
  // 数据库 运行sql语句--后端请求数据库
  let sql = 'select * from goods'
  // err  数据库如果出现了异常 返回的错误信息
  // data 数据库返回的数据
  db.query(sql,  (err, data)=> {
    res.send(data)
  })
});
1
2
3
4
5
6
7
8
9
10
11
12
  • 通过浏览器请求该地址 或者通过postman 发送 get请求

图2

# 前端请求参数的获取

# 1.post 发送的json数据-req.body

router.post('/', function (req, res, next) {
    //获取请求参数-post json数据
    console.log(req.body)
})
1
2
3
4

# 2.get 请求的url 携带参数 获取键值对

请求参数携带方式:url?key=value&key1=value1

router.get('/', function (req, res, next) {
    //获取请求参数-post json数据
    let data = req.query;
})
1
2
3
4

# 3.get 请求的url 携带参数 获取id

请求参数携带方式:/goods/info/100001`

地址: /goods/info/{id}          
请求参数: id 商品id
请求方式:get
1
2
3
router.get('/info/:id', function (req, res, next) {
   //获取直接将数据拼接到 请求地址上的get请求的数据
  console.log(req.params.id);
})
1
2
3
4

# 4.获取文件-保存文件方式

yarn  add multer
1
const multer = require("multer");
const db = require('./db/db');

const storage = multer.diskStorage({
    destination: "public/images/upload", 
    filename: function (req, file, cb) {
      var fileFormat = file.originalname.split(".");
      var filename = new Date().getTime();
      cb(null, filename + "." + fileFormat[fileFormat.length - 1]);
    },
  });
  // 上传对象
  const upload = multer({
    storage,
  });

// 图片上传接口
router.post("/upload", upload.single("file"), (req, res) => {
    let { filename } = req.file;
    if(filename){
        res.send(0,'上传成功','/images/upload/'+filename)
    }else{
         res.send(1,'上传图片失败,检查file对象是否发送')
    }
  });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//axios 封装的post 请求在发送formdata时会自动更新页面  
let inp = document.querySelector('input');
        inp.addEventListener('change', function (event) {
            let file = this.files[0];
            event.preventDefault();
            //将文件对象放到 formData中
            let formData = new FormData();
            formData.append("file", file);
			//实例化axios
            const uploadFile = axios.create({
                baseURL: 'http://localhost:9000', 
                timeout: 5000,
                headers: {'Content-Type': 'multipart/form-data'}
            });
            //设置请求头 并 发送文件
            uploadFile({
                url: '/addGoods/upload',
                method: 'post',
                data: formData
            }).then(res => {
                alert(res.data.data)
            })

        })

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 跨域问题解决

在app.js 入口文件 取消 请求头限制

注意:必须现在模块 注册代码之前


//设置允许跨域访问该服务.
app.all('*', function (req, res, next) {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Headers', 'Content-Type');
  res.header('Access-Control-Allow-Methods', '*');
  res.header('Content-Type', 'application/json;charset=utf-8');
  next();
});
1
2
3
4
5
6
7
8
9
编辑 (opens new window)
上次更新: 2022/05/28, 19:34:46
最近更新
01
go语言基础
07-13
02
《react上手教程》- 基础语法
07-13
03
redux-redux toolkit-状态管理
03-18
更多文章>
Theme by Vdoing | Copyright © 2019-2023

cometang | 唐世杰 渝ICP备18015657号-2

  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式