• node.js+Express框架,前端自己创建接口


    目录

    一、安装

    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. 1)全局安装
    2. express npm install -g express-generator
    3. 2)查看是否安装成功
    4. express -v
    5. 3)建立后端服务器文件夹
    6. server express server -e.
    7. 4)进入创建的文件夹
    8. cd server
    9. 5)安装 
    10. npm i

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

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

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

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

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

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

     然后重新启动服务器

    3、安装nodemon

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

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

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

    1. 1)安装 nodemon
    2. npm install -g nodemon
    3. 2)使用 nodemon
    4. 传统的方式是运行node app.js命令启动项目,需要手动重启
    5. 现在将node命令替换为nodemon命令,使用nodemon app.js启动项目,会自动重启

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

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

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

     

    这样就可以啦 

    二、写接口

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

    1. router.get('/Login', (req, res) => {
    2. // 前端接口/api/Login, 后端这里用/Login
    3. // req 请求对象, res 响应对象
    4. res.send('登录成功'); // 响应'1'回去
    5. })

    一种是在app.js中写

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

    测试接口使用Postman

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

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

    1. 安装
    2. npm install --save body-parser
    3. 配置
    4. var bodyParser = require('body-parser')
    5. app.use(bodyParser.urlencoded({ extended: false }))
    6. app.use(bodyParser.json())
    7. 使用示例
    8. // 引包
    9. var express = require('express')
    10. var bodyParser = require('body-parser')
    11. var app = express()
    12. // 只要加上这两句配置,则在 post请求对象上会多出一个属性:body
    13. // 也就是可以用 req.body 来获取发送过来的数据
    14. // parse application/x-www-form-urlencoded
    15. app.use(bodyParser.urlencoded({ extended: false }))//post
    16. // parse application/json
    17. app.use(bodyParser.json())//post

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

    1. router.post('/user/emia', (req, res) => {
    2. // 后端收到post传参
    3. console.log(req.body);
    4. res.send({
    5. status: 0,
    6. code: 200,
    7. msg: 'POST请求成功!',
    8. data: ['123', '456']
    9. })
    10. });

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

    三、连接数据库

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

    步骤分为三步:

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

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

    ③ 通过 mysql 模块执行 SQL 语句

    1、安装:

    只需要安装MySQL ServerMySQL Workbench这两个软件,就可以了满足需求了

    地址:

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

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

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

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

    2、连接数据库

    1. 1)安装mysql模块
    2. npm install mysql
    3. 2)配置 mysql 模块
    4. // 1. 导入 mysql 模块
    5. const mysql = require('mysql')
    6. // 2. 建立与 MySQL 数据库的连接关系
    7. const db = mysql.createPool({
    8.   host: '127.0.0.1'// 数据库的 IP 地址
    9.   user: 'root'// 登录数据库的账号
    10.   password: 'admin123'// 登录数据库的密码
    11.   database: 'my_db_01'// 指定要操作哪个数据库
    12. })
    13. 3)测试 mysql 模块能否正常工作
    14. 调用 db.query() 函数,指定要执行的 SQL 语句,通过回调函数拿到执行的结果:
    15. // 测试 mysql 模块能否正常工作
    16. db.query('select 1', (err, results) => {
    17.   // mysql 模块工作期间报错了
    18.   if(err) return console.log(err.message)
    19.  //打印出[RowDataPacket{‘1’:1}]的结果就证明数据库连接正常  
    20. console.log(results)
    21. }) 

    3、执行

    就展示一部分 

    1. 1)查询数据
    2. // 查询 users 表中所有的数据
    3. const sqlStr = 'select * from users'
    4. db.query(sqlStr, (err, results) => {
    5.   // 查询数据失败
    6.   if (err) return console.log(err.message)
    7.   // 查询数据成功
    8.   // 注意:如果执行的是 select 查询语句,则执行的结果是数组
    9.   console.log(results)
    10. }) 
    11. 2)插入数据
    12. //向users表中,新增一条数据,其中username的值为Spider-Man,password的值为 pcc123
    13. const user = { username: 'Spider-Man', password: 'pcc123' }
    14. // 定义待执行的 SQL 语句,其中英文的?表示占位符
    15. const sqlStr = 'insert into users (username, password) values (?, ?)'
    16. // 执行 SQL 语句,使用数组的形式,依次为?占位符指定的具体的值
    17. db.query(sqlStr, [user.username, user.password], (err, results) => {
    18.   // 执行 SQL 语句失败了
    19.   if (err) return console.log(err.message)
    20.   // 成功了
    21.   // 注意:如果执行的是 insert into 插入语句,则 results 是一个对象
    22.   // 可以通过 affectedRows 属性,来判断是否插入数据成功
    23.   if (results.affectedRows === 1) {
    24.     console.log('插入数据成功!')
    25.   }
    26. }) 

    具体连接过程如下:

    上面的步骤是全部写在一个文件的,现在我把上面的步骤各自分成文件

    第一步:安装

    npm  install  mysql

    第二步:导入 mysql 模块并配置模块,创建文件server/conf/db.config.js

    1. //导入 mysql 模块
    2. const mysql = require('mysql')
    3. //与 MySQL 数据库的连接
    4. module.exports = {
    5. host: 'localhost'// 数据库的 IP 地址
    6.   user: 'root'// mysql登录数据库的账号
    7.   password: 'admin123'// mysql登录数据库的密码
    8. port: '3306', // 端口
    9.   database: 'my_db_01'// 指定要操作哪个数据库名称
    10. }

    第三步:封装mysql查询函数,创建文件server/conf/db.js 

    1. const dbConfig = require('./db.config');
    2. module.exports = {
    3. query: function(sql, params, callback) {
    4. //每次使用的时候需要创建链接,数据操作完成之后要关闭连接
    5. const connection = mysql.createConnection(dbConfig)
    6. connection.connect(function(err) {
    7. if (err) {
    8. throw err
    9. }
    10. //开始数据操作
    11. connection.query(sql, params, function(err, results, fields) {
    12. if (err) {
    13. throw err
    14. }
    15. //将查询出来的数据返回给回调函数
    16. callback &&
    17. callback(
    18. JSON.parse(JSON.stringify(results)),
    19. JSON.parse(JSON.stringify(fields))
    20. )
    21. //停止链接数据库,必须在查询语句后,要不然一调用这个方法,就直接停止链接,数据操作就会失败
    22. connection.end(function(err) {
    23. if (err) {
    24. console.log('关闭数据库连接失败!')
    25. throw err
    26. }
    27. })
    28. })
    29. })
    30. },
    31. }

    这个封装可以按照这里来写

    1. module.exports = {
    2. query: function(sql, params, callback) {
    3. //每次使用的时候需要创建链接,数据操作完成之后要关闭连接
    4. const connection = mysql.createConnection(dbConfig)
    5. connection.connect(function(err) {
    6. if (err) {
    7. throw err
    8. }
    9. //事件驱动回调
    10. connection.query(sql, params, callback)
    11. //释放连接
    12. connection.release()
    13. })
    14. },
    15. }

    第四步:执行,server/routes/index.js

    1. var express = require('express');
    2. var router = express.Router();
    3. const db = require('../conf/db');
    4. /* GET home page. */
    5. router.get('/List', (req, res, next) => {
    6. // sql查询user表
    7. db.query('select * from users', [], function(results, fields) {
    8. // 以json的形式返回
    9. res.json({ results })
    10. })
    11. })
    12. module.exports = router;

    第五步:启动项目

    第六步:使用Postman测试

    四、注意事项

    1、跨域

    使用 cors 中间件解决跨域问题:

    cors 是 Express 的一个第三方中间件。通过安装和配置 cors 中间件,可以很方便地解决跨域问题。等于是服务端直接允许请求获取资源并使用。

    app.js

    1. 1)安装中间件 
    2. npm install cors
    3. 2)导入中间件 
    4. const cors = require('cors')
    5. 3)配置中间件,一定注意是在路由之前调用
    6. app.use(cors())

    前端:

    在vue.config.js中填写反向代理

    1. proxy: {
    2. //灵活代理;请求前缀为/api时,走下面的代理
    3. "/api": {
    4. target: "http://localhost:3000/", //代理服务器把请求转发给url(真正的后台服务器)
    5. changeOrigin: true, //用于控制请求头中的host值, 允许跨域
    6. //真正的服务器没有/api,所以要重写路径置空,否则找不到相应的路径
    7. pathRewrite: {
    8. "/api": "",
    9. },
    10. },
    11. },

    后端:

    1. router.post('/user/emia', (req, res, next) => {
    2. // 调用res.send方法,向客户端响应结果
    3. res.header("Access-Control-Allow-Origin", "*"); //只要添加这一句就可以了
    4. res.send({
    5. status: 0,
    6. code: 200,
    7. msg: 'POST请求成功!',
    8. data: ['123', '456']
    9. })
    10. });

  • 相关阅读:
    猿创征文|MYSQL主从复制
    谷歌新大楼正式开放:“龙鳞”顶棚、100%电动、最大地热桩系统······
    【收藏系列】MySQL入门总结 ——>看这一篇就够了
    动态内存管理
    JSP EL表达式的基本语法及运算符(超详细)
    Web APIs第02天笔记——排他思想
    如何运行一个 SSM 项目以及解决 JDBC 连接数据库遇到的问题(已解决)
    防汛救援便携式应急通信系统解决方案
    如何让企业督办管理系统对接第三方应用
    CPP-Templates-2nd--第十五章 模板实参推导
  • 原文地址:https://blog.csdn.net/Qxn530/article/details/127881628