Node + Express + MySQL 接口开发完整案例

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Node + Express + MySQL 接口开发完整案例


先上目录结构:
​​
​​2018122710325389.png

简单描述一下,主要的目录文件
config /
           dbConfig: 文件配置了,数据库信息
           DBHelp: 数据库连接池的连接与释放
controller:放置开发的接口
routes: 接口抛出(接口路由层)
app 启动入口,配置接口跨域,返回字符编码···

dbConfig.js

const config = {

// 启动端口
port: 3000,
// 数据库配置
database: {
    DATABASE: 'test',
    USERNAME: 'root',
    PASSWORD: '密码',
    PORT: '3306',
    HOST: 'localhost',
    insecureAuth : true,
    useConnectionPooling: true
}

}

module.exports = config

DBHelp.js

let DB_MYSQL = require('mysql');
let DB_CONFIG = require('../config/dbConfig');
/**

  • 数据库连接池
  • @type {Pool}

*/
let pool = DB_MYSQL.createPool({

host: DB_CONFIG.database.HOST,
user: DB_CONFIG.database.USERNAME,
password: DB_CONFIG.database.PASSWORD,
database: DB_CONFIG.database.DATABASE,
port: DB_CONFIG.database.PORT

});
/**

  • 通用方法
  • @param sql
  • @param options
  • @param callback

*/
let query = (sql, options, callback) =>{

pool.getConnection((error, connection) =>{
    if (error) {
        callback(error, null, null);
    } else {
        connection.query(sql, options, (error, results, fields) =>{
            //释放连接
            connection.release();
            //事件驱动回调
            callback(error, results, fields);
        });
    }
});

};
module.exports=query;

controller/ ····

/**

  • 获取列表
  • @type {Connection}

*/
let _ = require('lodash')
let DBHelp = require('../../config/DBHelp.js');
let getArticle = (data, success) =>{

// SQL 语句
let SQL = 'SELECT * FROM websites';
let counter = 0
let SQL_ = SQL+' WHERE ';
// 多个条件时循环data去除key, val
_.forEach(data, (key, val) =>{
    if (counter > 0){
        SQL = SQL+ ' AND ' + val + ' = ' + key;
    } else {
        SQL = SQL_+ val + '= ' + key + ' OR name LIKE %' + key +'%';
    }
    counter++
});
/**
 * resultData
 * @code: 状态码
 * @data:data
 * @codeMessage: 状态消息
 */
const resultData = {
    code: null,
    data: null,
    codeMessage: null
}
DBHelp(SQL, (error, result, fields) =>{
    if(error){
        resultData.error = error.message
    }
    resultData.code = 200;
    resultData.data = result;
    resultData.codeMessage = 'success'
    success(resultData);
})

}
module.exports = getArticle

router/index.js

let express = require('express');
let router = express.Router();
let getArticle = require('../controller/article/getArticle_controller.js');
let addArticle = require('../controller/article/addArticle_controller.js');
/**

  • 数据查询

*/
router.get('/article/list/get', (request, response, next)=>{
getArticle(request.query, data =>{

response.end(JSON.stringify(data));

})
});
/**

  • 数据新增
  • @type {Router|router}
  • request.body.XX

*/
router.post('/article/list/add', (request, response, next)=>{
request.body = {

name: '测试',
url: 'http://www.test.aa',
alexa: '32',
country: 'CN'

}

addArticle(request.body, data =>{

response.end(JSON.stringify(data));

})
});
module.exports = router;

app.js

let createError = require('http-errors');
let express = require('express');
let path = require('path');
let cookieParser = require('cookie-parser');
let logger = require('morgan');

let indexRouter = require('./routes/index');
let usersRouter = require('./routes/users');

let app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
// 可跨域 ,编码格式
app.all('*',function(request, response, next){
response.header('Access-Control-Allow-Origin','*');
response.header('Access-Control-Allow-Headers','X-Requested-With');
response.header('Access-Control-Allow-Methods','PUT,POST,GET,DELETE,OPTIONS');
response.header('X-Powered-By','3.2.1');
response.header('Content-Type','application/json;charset=utf-8');
next();
});
// 抛出接口
app.use('/', indexRouter);
app.use('/users', usersRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};

// render the error page
res.status(err.status || 500);
res.render('error');
});

module.exports = app;

// 下面奉上运行结果:(post方法用postman测试就好啦!)

20181227104233726.png

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
53 1
|
1月前
|
Web App开发 JavaScript 前端开发
Node.js开发
Node.js开发
48 13
|
1月前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
2月前
|
存储 JavaScript 前端开发
深入浅出Node.js后端开发
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将以Node.js为例,深入探讨其背后的哲学思想、核心特性以及在实际项目中的应用,旨在为读者揭示Node.js如何优雅地处理高并发请求,并通过实践案例加深理解。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和思考。
|
2月前
|
Web App开发 开发框架 JavaScript
深入浅出Node.js后端开发
本文将带你领略Node.js的魅力,从基础概念到实践应用,一步步深入理解并掌握Node.js在后端开发中的运用。我们将通过实例学习如何搭建一个基本的Web服务,探讨Node.js的事件驱动和非阻塞I/O模型,以及如何利用其强大的生态系统进行高效的后端开发。无论你是前端开发者还是后端新手,这篇文章都会为你打开一扇通往全栈开发的大门。
|
2月前
|
Web App开发 开发框架 JavaScript
深入浅出Node.js后端开发
在这篇文章中,我们将一起探索Node.js的奇妙世界。无论你是刚接触后端开发的新手,还是希望深化理解的老手,这篇文章都适合你。我们将从基础概念开始,逐步深入到实际应用,最后通过一个代码示例来巩固所学知识。让我们一起开启这段旅程吧!
|
1月前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
本文将带领读者从零基础开始,一步步深入到Node.js后端开发的精髓。我们将通过通俗易懂的语言和实际代码示例,探索Node.js的强大功能及其在现代Web开发中的应用。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的见解和技巧,让你的后端开发技能更上一层楼。
|
2月前
|
JavaScript 前端开发 API
深入理解Node.js事件循环及其在后端开发中的应用
本文旨在揭示Node.js的核心特性之一——事件循环,并探讨其对后端开发实践的深远影响。通过剖析事件循环的工作原理和关键组件,我们不仅能够更好地理解Node.js的非阻塞I/O模型,还能学会如何优化我们的后端应用以提高性能和响应能力。文章将结合实例分析事件循环在处理大量并发请求时的优势,以及如何避免常见的编程陷阱,从而为读者提供从理论到实践的全面指导。
|
2月前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
本文将带你走进Node.js的世界,从基础到进阶,逐步解析Node.js在后端开发中的应用。我们将通过实例来理解Node.js的异步特性、事件驱动模型以及如何利用它处理高并发请求。此外,文章还会介绍如何搭建一个基本的Node.js服务器,并探讨如何利用现代前端框架与Node.js进行交互,实现全栈式开发。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和深入的理解。
38 4
|
2月前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【10月更文挑战第40天】在这篇文章中,我们将一起探索Node.js的奥秘,从基础概念到实际应用,逐步揭示如何利用Node.js构建高效、可扩展的后端服务。通过实际案例分析,我们将了解Node.js在现代Web开发中的应用,以及如何克服常见的开发挑战。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技巧,帮助你在Node.js的道路上更进一步。
33 4

推荐镜像

更多