目录

一、安装

1、安装node.js

2、安装Express框架

3、安装nodemon

二、写接口

三、连接数据库

1、安装:

2、连接数据库

3、执行

具体连接过程如下:

四、注意事项

1、跨域


这篇文章看完如果您觉得有所收获,认为还行的话,就点个赞收藏一下呗

一、安装

1、安装node.js

node就不讲了,你们应该都安装过了 

2、安装Express框架

官方给出的概念:Express是基于Node.js平台,快速、开发、极简的Web开发框架 

通俗的理解:Express的作用和Node.js内置的http模块类似,是专门用了创建Web服务器的

在项目所处的目录中(输入cmd即可看到终端),运行如下的终端命令,即可将express安装到项目中使用:

(1)全局安装

express npm install -g express-generator


(2)查看是否安装成功

express -v


(3)建立后端服务器文件夹

server express server -e.


(4)进入创建的文件夹

cd server


(5)安装 

npm i

到这里安装就结束了,目录的介绍如下

然后把文件server用vscode打开,打开控制台输入命令npm start 

然后打开浏览器,输入默认地址http://localhost:3000/即可打开网页

若是想要不想使用默认端口3000,可以自己定义端口号

打开server/app.js,在文件中写以下代码

// 监听端口
app.listen(888, () => {
  console.log('服务器已经启动');
})

 然后重新启动服务器

3、安装nodemon

nodemon是一个自动启动node文件的第三方包 。

在编写调试Node.js项目的时候,如果修改了项目的代码,则需要频繁的手动close掉,然后再重新启动,非常繁琐。可以使用nodemon(nodemon - npm)这个工具,他能够监听项目文件的变动,当代码被修改后,nodemon会自动帮我们重启项目,极大方便了开发个调试。

只能在开发阶段使用,因为他是通过watch来进行检测代码,

(1)安装 nodemon

npm install -g nodemon


(2)使用 nodemon
传统的方式是运行node app.js命令启动项目,需要手动重启
现在将node命令替换为nodemon命令,使用nodemon app.js启动项目,会自动重启

补充:之前我们是使用npm start命令启动,其实他是运行的node  

所以我们现在不使用npm start,而是nodemon app.js

如果出现这个问题,有可能是因为缓存的问题,所以清理一下就可以了

 

这样就可以啦 

二、写接口

(推荐这个) 一种是在server/routes文件下创建路由模块,在模块中写

router.get('/Login', (req, res) => {
  // 前端接口/api/Login, 后端这里用/Login

  // req 请求对象, res 响应对象
  res.send('登录成功'); // 响应'1'回去
})

一种是在app.js中写

app.get('/login' ,(req, res) =>{
  // 后端收到post传参
  console.log(req.body);
  res.send('登录成功')
});

测试接口使用Postman

 注意,server写get接口,是可以获取到的,但是写post则会报错404

那是因为在express中没有获取post请求 的API ,我们要用第三方包来获取body-parser 中间件

安装
npm install --save body-parser

配置
var bodyParser = require('body-parser')
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())

使用示例
// 引包
var express = require('express')
var bodyParser = require('body-parser')
var app = express()

// 只要加上这两句配置,则在 post请求对象上会多出一个属性:body
// 也就是可以用 req.body 来获取发送过来的数据 
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))//post
// parse application/json
app.use(bodyParser.json())//post

 那我们来写一下代码,看看是否可以使用post接口

router.post('/setinfo', (req, res, next) => {
  // 后端收到post传参
  console.log(req.body);
  const { username, password } = req.body
  // 在这里执行验证用户名和密码的逻辑
  if (username === 'admin' && password === '123456') {
    res.send('获取成功')
  } else {
    res.status(401).send({
      code: 401,
      msg: '用户名或密码错误',
    })
  }
})

到这里就可以获取到post接口啦 

三、连接数据库

前面两步其实就可以完成一些返回简单数据的接口,但如果想要完成一些比较复杂的,那就要连接数据库了。这里我拿MySQL数据库来讲。

步骤分为三步:

① 安装操作 MySQL 数据库的第三方模块(mysql

② 通过 mysql 模块连接到 MySQL 数据库 

③ 通过 mysql 模块执行 SQL 语句

1、安装:

只需要安装MySQL ServerMySQL Workbench或者Navicat软件就可以了

地址:

1、MySQL Server:专门用来提供数据存储和服务的软件。

2、MySQL Workbench 或者 Navicat:可视化的 MySQL 管理工具,通过它,可以方便的操作存储在 MySQL Server 中的数据

参考他的文章,他写的比较详细:

https://blog.csdn.net/weixin_43804496/article/details/115846430

2、打开数据库

我这里有两个,一个是mysql server,一个是mysql front

mysql server直接在服务里面启动那个即可

1、按下Win + R组合键,打开运行对话框,输入cmd进入命令提示符

2、输入services.msc,就可以打开服务管理窗口了

3、找到MySQL,选择启动即可

注意:mysql server的账号和密码在安装的时候就创建好了,一定要保存记录好,不要忘记哦

mysql front是直接打开小皮,启动mysql即可(我这里装的是mysql5.7版本的)

注意:mysql front的账号和密码在小皮的数据库中可以看到,一般默认账号和密码都是root

我这里使用navicat来操作

第一步:打开navicat,点击文件——新建连接——选择mysql——下一步

第二步:输入连接名称——用户名——密码——点击测试连接

注意:测试链接这里,一定要先打开server

第三步:测试连接成功后,点击确定后,就可以在列表中看到了,双击就是打开连接

第四步:鼠标右键——选择新建数据库——输入数据库名称——点击确定即可创建新的数据库了

3、连接数据库

(1)安装mysql模块

npm  install  mysql2

(2)配置 mysql 模块

创建文件server/conf/db.config.js、server/conf/db.js两个文件

数据库信息:db.config.js

const db = {
  host: '192.168.4.155', // 数据库的 IP 地址
  // host: 'localhost', // 数据库的 IP 地址
  user: 'root', // 登录数据库的账号
  password: 'root', // 登录数据库的密码
  database: 'nodejs_lianxi', // 指定要操作哪个数据库
  // port: 3306, //端口号,默认3306
  // options: {
  //   encrypt: false, //加密,设置为true时会连接失败 Failed to connect to localhost:1433 - self signed certificate
  //   enableArithAbort: false,
  // },
  // pool: {
  //   min: 0,
  //   max: 10,
  //   idleTimeoutMillis: 3000,
  // },
}

//与 MySQL 数据库的连接
module.exports = db

连接数据库:db.js

const dbConfig = require('./db.config')
const mysql = require('mysql2')
// const mysql = require('mysql')

module.exports = {
  query(sql, params, callback) {
    return new Promise((resolve, reject) => {
      const connection = mysql.createConnection(dbConfig)
      connection.connect((err) => {
        if (err) {
          // console.log('数据库连接失败!')
          reject(err)
        }
        // console.log('数据库连接成功!')
      })
      connection.query(sql, params, (err, results, fileds) => {
        if (err) {
          // console.log('数据库连接失败!')
          reject(err)
        }
        // resolve({ results, fileds })
        // resolve({ results })
        resolve(results)
      })
      connection.end((err) => {
        if (err) {
          // console.log('数据库关闭失败!')
          reject(err)
        }
        // console.log('数据库关闭成功!')
      })
    })
  },
}

4、使用数据库

在routes下的文件内引入db.js

var express = require('express')
var router = express.Router()
const db = require('../conf/db')

/*  
  注释:
  1、前端接口/api/Login(根据app.js中引入是怎么写的,把前缀和这里的相加), 后端这里用/Login
  2、req 请求对象, res 响应对象
  3、post方法获取参数:req.body
  4、调用res.send方法,向客户端响应结果

*/

// 获取用户列表
router.get('/List', async (req, res, next) => {
  // // 单独设置此接口的响应头以避免缓存
  // res.setHeader('Cache-Control', 'no-store') //适用于HTTP/1.1 的标准
  // res.setHeader('Pragma', 'no-cache') //老的服务器上
  // res.setHeader('Expires', '0') //老的服务器上

  // 数据库
  const userSQL = 'select * from user'
  const users = await db.query(userSQL, [])
  // 返回成功响应
  res.json({
    code: 200,
    success: true,
    message: '获取数据成功',
    data: users,
  })
})

module.exports = router

(4)项目内调用使用即可

四、注意事项

1、全局配置响应头

app.js

// 引入接口文件
var indexRouter = require('./routes/index')
var usersRouter = require('./routes/users')
var homeRouter = require('./routes/home')

var express = require('express')
var app = express()


// 设置全局响应头
app.use(function (req, res, next) {
  // 设置响应头以避免缓存
  res.setHeader('Cache-Control', 'no-store') //适用于HTTP/1.1 的标准
  res.setHeader('Pragma', 'no-cache') //老的服务器上
  res.setHeader('Expires', '0') //老的服务器上
  res.setHeader(
    'Cache-Control',
    'no-store, no-cache, must-revalidate, proxy-revalidate'
  )
  // 跨域
  res.setHeader('Access-Control-Allow-Origin', '*')
  // res.header('Access-Control-Allow-Origin', '*') // 跨域就这一句话就OK了
  next()
})



// 引入所有接口文件,'/api'部分可重复(也可只写/,如app.use('/', indexRouter),前端调用直接写里面的接口)
app.use('/api', indexRouter) //对应里面的接口要加上/api
app.use('/api/user', usersRouter) //对应里面的接口要加上/api/user
app.use('/api', homeRouter)

注意:这个一定要放在引入routes文件的前面才生效

单独的响应头在对应的接口里面加上就行

router.post('/user/emia', (req, res, next) => {
  //响应头
  res.header("Access-Control-Allow-Origin", "*"); //跨域

  // 调用res.send方法,向客户端响应结果
  res.send({
    status: 0,
    code: 200,
    msg: 'POST请求成功!',
    data: ['123', '456']
  })
});

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐