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

news2025/2/26 9:42:30

目录

一、安装

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('/user/emia', (req, res) => {
   // 后端收到post传参
   console.log(req.body);
   res.send({
    status: 0,
    code: 200,
    msg: 'POST请求成功!',
    data: ['123', '456']
   })
 });

 到这里就可以获取到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)安装mysql模块
npm  install  mysql


(2)配置 mysql 模块
// 1. 导入 mysql 模块
const mysql = require('mysql')
// 2. 建立与 MySQL 数据库的连接关系
const db = mysql.createPool({
  host: '127.0.0.1', // 数据库的 IP 地址
  user: 'root',     // 登录数据库的账号
  password: 'admin123',  // 登录数据库的密码
  database: 'my_db_01',  // 指定要操作哪个数据库
}) 


(3)测试 mysql 模块能否正常工作
调用 db.query() 函数,指定要执行的 SQL 语句,通过回调函数拿到执行的结果:
// 测试 mysql 模块能否正常工作
db.query('select 1', (err, results) => {
  // mysql 模块工作期间报错了
  if(err) return console.log(err.message)
 //打印出[RowDataPacket{‘1’:1}]的结果就证明数据库连接正常  
console.log(results)
}) 

3、执行

就展示一部分 

(1)查询数据
// 查询 users 表中所有的数据
const sqlStr = 'select * from users'
db.query(sqlStr, (err, results) => {
  // 查询数据失败
  if (err) return console.log(err.message)
  // 查询数据成功
  // 注意:如果执行的是 select 查询语句,则执行的结果是数组
  console.log(results)
}) 



(2)插入数据
//向users表中,新增一条数据,其中username的值为Spider-Man,password的值为 pcc123
const user = { username: 'Spider-Man', password: 'pcc123' }
// 定义待执行的 SQL 语句,其中英文的?表示占位符
const sqlStr = 'insert into users (username, password) values (?, ?)'
// 执行 SQL 语句,使用数组的形式,依次为?占位符指定的具体的值
db.query(sqlStr, [user.username, user.password], (err, results) => {
  // 执行 SQL 语句失败了
  if (err) return console.log(err.message)
  // 成功了
  // 注意:如果执行的是 insert into 插入语句,则 results 是一个对象
  // 可以通过 affectedRows 属性,来判断是否插入数据成功
  if (results.affectedRows === 1) {
    console.log('插入数据成功!')
  }
}) 

四、注意事项

1、跨域

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

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

app.js

(1)安装中间件 
npm install cors


(2)导入中间件 
const cors = require('cors')


(3)配置中间件,一定注意是在路由之前调用
app.use(cors())

前端:

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

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

后端:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/9911.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多线程详细介绍

一、分类 创建线程的四种方法: (1)继承Thread (2)实现Runnable (3)实现Callable (4)线程池创建一个新的线程可以通过继承Thread类或者实现Runnable接口来实现&#xff0…

JAVA基础—面向对象

1、面向对象介绍 2、类和对象 2.1、如何定义类、得到类的对象、使用对象 2.2、类和对象的总结 2.3、定义类的补充事项—测试类与Javabean类 成员变量一般无需指定初始值,存在默认值。 但是局部变量必须定义初始值。 2.4、定义类的注意事项 2.4.1、驼峰模式 单词…

容器docker安装,以及paddle容器环境安装

例如 一台新的 服务器部署环境 1.环境服务器部署 第一步:查看显卡的驱动是否装好了,可以用nvidia-smi,正常显示表示已经安装 上面版本没有问题,但是下面版本驱动本本比较低,不支持11.2cuda安装,要更新驱动 docker, nvidia-docker 安装之前先确认如下三个 paddle 2.3 …

Win11 KB5019157(22000.1281)11月累积补丁推送了!

微软在最新推出的KB5019157更新补丁中修复了Microsoft Store更新等多个错误,但是仍然存在Direct Access问题。Win11用户安装之后即可升级至22000.1281,下面就来看看详细内容。 重要信息 KB5019157累积更新补丁 它解决了 Microsoft Store 的一些持续更新失…

shell中通配符的使用

shell中的通配符与正则表达式是不同的两种功能。 正则表达式一般不会在bash直接应用,需要使用sed、grep、awk来解释正则表达式。 通配符则可以通过bash直接解释,一般用作名称展开。 bash中可以使用的通配符符号包括:*、?、{}、[]、^ 这些…

【环境配置笔记】基于clang15搭建liunx内核代码阅读环境

环境: Toolchain(yocto导出)Linux5-15,arm64VS codeclangd15.0.3 1. VScode配置 在VS code / VS code server中配置以下插件: ClangdC/CC/C Extension PackC/C SnippetsCode RunnerCode Spell CheckercompareitDev…

拖拽页面元素+flip动画的案例

先上效果: 实现思路和流程: 基础页面布局 给每个拖动元素加上 draggable"true"ondragstart(开始拖动某个元素时)做出 对应的处理 获得操作的具体元素 给目标元素添加对应的样式 显示透明 增加虚线描边ondragover 被拖动的元素hover到目标元素…

java计算机毕业设计ssm养老管理系统-敬老院系统

项目介绍 1.登录页面要有验证码 2.在健康信息模块中有三个小模块分别是饮食信息、身体信息、医疗常识,饮食信息就是护工每天负责老人的饮食搭配包括;早中晚餐;各种菜谱、图片、注意事项等,身体信息就是老人的各项身体指标,医疗常识就是每一种病对应一种病例还有每天推送更新的关…

互联网获客经验分享(一)

现在的流量都很贵了。特别是公域的流量。在这样的情况下,我们如何从互联网上获取客户?满足我业务的需求呢。 今天为大家分享基础的方法,后续我们会不定期的分享一些互联网软件获客的经验,希望能够帮助到你。 流量的本质 不管是平台方还是用户,流量都是生命线。在这样的…

好心情心理咨询平台:独处≠孤独,独处对心理健康有多重要?

说到独处,有人认为那不就是自己一个人呆着嘛。 非也非也,独处其实不是要求远离人群,而是在信息与情感上与他人无交流,做到无社会互动,与人在网上聊天、打电话可都不能算是独处。 相反,自己一个人在图书馆…

ClickHouse Senior Course Ⅳ

序言 梳理一下ClickHouse的数据库引擎 首先了解下什么是数据库引擎(cuiyaonan2000163.com) 数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求。 使用数据库引…

[附源码]java毕业设计健身房管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

《无障碍环境认证实施方案》发布

市场监管总局 中国残联关于印发 《无障碍环境认证实施方案》的通知 国市监认证发〔2022〕94号各省、自治区、直辖市和新疆生产建设兵团市场监管局(厅、委)、残联,各有关单位:现将《无障碍环境认证实施方案》印发给你们&#xff0…

【附源码】Python计算机毕业设计团结里小区疫情防控系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

【Java|golang】775. 全局倒置与局部倒置

给你一个长度为 n 的整数数组 nums &#xff0c;表示由范围 [0, n - 1] 内所有整数组成的一个排列。 全局倒置 的数目等于满足下述条件不同下标对 (i, j) 的数目&#xff1a; 0 < i < j < n nums[i] > nums[j] 局部倒置 的数目等于满足下述条件的下标 i 的数目&a…

KEGG信号通路富集分析

KEGG信号通路富集分析 当我们手头有转录组测序后的差异分析数据后&#xff0c;想更进一步的去分析这下差异基因在信号通路富集情况&#xff0c;其中一种办法是使用KEGG网站进行信号通路富集分析。 1. 通过uniprot将Gene name转换为GeneID UniProt网站中的ID mapping具有强大…

关于HTTP/1.1,HTTP/2和HTTP/3的区别与联系

HTTP/1.1 每当说起http/1.1就会想起以前叫外卖的方式&#xff0c;那个时候很多店都没有专门的外卖员&#xff0c;打电话叫外卖&#xff0c;老板那就会叫人送货来&#xff0c;但是这样的方式有一个很大的问题&#xff0c;店员总是忘记放筷子。于是&#xff0c;店员送完外卖以后…

揭秘:如何用主题公园的思路做一款VR高尔夫游戏

作为一个从没玩过高尔夫球的人&#xff0c;我竟然第一次VR游戏中找到了高尔夫球的乐趣。由Mighty Coconut开发的《Walkabout Mini Golf》是这样一款VR游戏&#xff0c;它将迷你高尔夫与各种虚拟场景结合&#xff0c;高尔夫并不是游戏的全部&#xff0c;但你必须进球才能解锁一个…

【Python开发】Flask开发实战:个人博客(四)

Flask开发实战&#xff1a;个人博客&#xff08;四&#xff09;本篇博客将是《Flask开发实战&#xff1a;个人博客》的最后一篇。本篇文章将会详细介绍博客后台的编写。 为了支持管理员管理文章、分类、评论和链接&#xff0c;我们需要提供后台管理功能。通常来说&#xff0c;…

PDF转HTML转换器哪个好用?快看看这里

PDF格式是我们经常使用的文件格式&#xff0c;但是难免会需要将其转换成其他的格式。比如转为HTML&#xff0c;大家是不是对它很陌生呢。其实HTML是一种网页浏览格式&#xff0c;平时我们打开的浏览器页面就是用HTML代码设置而成的。那我来考考大家&#xff0c;你们知道如何将P…