node配置express服务器、拦截路由、连接数据库,返回前端数据全过程

1、环境准备

node环境

查看当前node版本命令
node -v ; node – version
在这里插入图片描述

npm

nodejs下的包管理工具
查看当前npm版本命令
npm -v ; npm – version
在这里插入图片描述
node 与 npm 的版本最好具有依附性,如果node环境下不能运行npm命令 可能也存在版本不适问题;

2、初始化项目

npm init; --具有可选项
npm init -y;–都设置为默认选项
在这里插入图片描述
随之会在项目目录下生成一个package.json文件

3、创建文件夹

这一步主要是为了去创建
public (一般存放静态资源)、
routes (用来拦截路由)、
controller (处理拦截相对应路由的回调) 、
config (node配置数据库等configjs文件)、
views (视图)、
utils (存放工具文件及路由拦截的api)
等文件夹

4、创建app.js配置文件

首先在项目的根目录下创建app.js文件
如果想要搭建并运行我们自己的服务器,
一般会在这个文件里进行以下配置,

4.1、搭建express框架

安装:npm install express --save (项目依赖)
我这里安装的是4.17.1版本,
当然你也可以安装时使用npm i express@版本号 --save,来指定安装版本(i就是install的缩写)
在这里插入图片描述

4.1.1、最基础的服务器代码
**1、在app.js中引入express模块**
const express = require("express")
**2、创建服务器对象**
const myapp = express()
**3、配置服务器监听端口**
myapp.listen(8080,function(){
	console.log(`服务器已启动...\nhttp://localhost:8080`)
})

通过node app来启动服务器;
在这里插入图片描述
这时我们的服务器是可以正常启动了,监听端口为8080;

4.1.2 安装依赖模块

morgan --用于监听日志文件
body-parser --用于解析post请求,但是express版本4以上已经内置了此模块
serve-favicon --配置网页小图标
express-session --配置会话
multer --配置文件上传


链式安装以上模块: npm i morgan body-parser serve-favicon express-session multer --save
在这里插入图片描述

4.1.3 配置静态资源路径

配置时使用字符串拼接路径或者
使用nodejs内置的path模块的join拼接

// **1、引入express模块**
const express = require("express")
const morgan = require("morgan")
const favicon = require("serve-favicon")
const bodyParser = require("body-parser")
const path = require("path") //nodejs中内置的模块

// **2、创建服务器对象**
const myapp = express()

 **配置静态资源目录**
// myapp.use(express.static(__dirname+"/public"))
myapp.use(express.static(path.join(__dirname,"public")))
 **配置网页图标**
// myapp.use(favicon(__dirname+"/public/image/logo.png"))
myapp.use(favicon(path.join(__dirname,"public","image","logo.png")))

// **3、配置服务器监听端口**
myapp.listen(8080,function(){
	console.log(`服务器已启动...\nhttp://localhost:8080`)
})

在这里插入图片描述

4.2、拦截路由,配置路由

首先我们考虑到post请求需要配置解析post请求数据
利用express内置的body-parser或body-parser模块
在这里插入图片描述

4.3、前端发起请求后,出现跨域的问题

将以下代码放置在app.js中

// 解决同源策略
myapp.all('*', function (req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
  res.header("X-Powered-By", ' 3.2.1')
  res.header("Content-Type", "application/json;charset=utf-8");
  next();
});
// 拦截请求
myapp.post("/api/user/login", (req, res) => {
  console.log("拦截请求成功")
  console.log(req.body)
  res.send("返回数据成功")
})

在这里插入图片描述
这样其实我们就可以进行数据库连接然后查询数据通过res.send或res.json返回相应的数据;
但是为了使我们的代码更加优雅 可读性更强,我们通过routes文件夹来分路由拦截,提高了执行效率,及模块化思想编程;
所以我们接下来将其进行拆分

路由拦截拆分

在静态资源后配置路由模块
在这里插入图片描述

路由文件
在这里插入图片描述
此时依旧可以成功拦截请求,并返回数据
在这里插入图片描述
但是处理函数的代码还是不够优雅,因为其相当于是路由拦截后执行的控制操作
所以我们可以将其写入到contorller文件的js文件中去;

控制操作拆分

将处理函数进行拆分到contorller文件
在这里插入图片描述
在这里插入图片描述
这样所有的处理函数都在一起方便管理
同样的道理 路由拦截api我们也可以将其分离出来
在这里插入图片描述
在这里插入图片描述

5、node连接数据库

当我们完成以上操作时,我们已经成功的将前端发送过来的数据接收到,并且就绪;
现在我们需要连接数据库,通过数据库来查询出相应的数据,并给前端返回;

5.1、配置数据库相关操作

安装: npm i mysql --save (开发依赖)
在这里插入图片描述
安装成功我们在config文件夹下创建一个dbconfig.js文件(数据库配置文件)

const mysql = require("mysql") //引入mysql模块
module.exports = {
  dbConnect:function(sql,params,callback){
    // 建立连接
    let connect = mysql.createConnection({
      host:"localhost",
      port:3306,
      user:"root",
      password:"123",
      database:"$_doctor",
      multipleStatements:true, //支持执行多条 sql 语句
      timezone:"8:00" //设置时区,如果不匹配,就可能有时差
    })
    // 打开连接
    connect.connect()
    // 通过sql查询数据库
    connect.query(sql,params,callback)
    // 关闭连接
    connect.end()
  }
}

5.2、配置成功后在路由拦截处理函数sql查询及数据的返回

const db = require("../config/dbconfig")
module.exports = {
  login(req, res) {
    console.log("body拦截请求成功")
    console.log(req.body)
    let {uname,upwd} = req.body //解构赋值
    let sql = `select * from user_info where uname = ? and upwd = ?;`
    let params = [uname, upwd]
    db.dbConnect(sql, params, (err, data) => {
      console.log(data)
      if (!err && data.length == 1) {
        res.json({
          code: 0,
          data: data
        })
      } else {
        res.json({
          code: 4001,
          data: data
        })
      }
    })
  }
}

从数据库请求数据再返回给前端;
在这里插入图片描述
在这里插入图片描述

6、添加其他路由拦截时

在拦截其他路由时进行
routes路由的拦截
app中的路由的使用
api中拦截地址配置
contorller拦截处理函数的配置
完成以上几点就可以了;

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值