开发者社区> 好多米阳光> 正文

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

简介: 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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
MapReduce 原理介绍与开发实战
MapReduce 原理介绍与开发实战
48 0
【Spring开发】—— Spring Core
原文:【Spring开发】—— Spring Core 前言   最近由于一些工作的需要,还有自己知识的匮乏再次翻开spring。正好整理了一下相关的知识,弥补了之前对spring的一些错误认知。
912 0
接口开发前准备工作
调用集成接口前,请检查是否已经实现以下步骤,入驻平台等步骤已实现可忽略。 注:如果还没有签约或者在签约审核过程中可以使用沙箱环境测试接口。 一、平台入驻 1、使用支付宝账号入驻开放平台。 注册支付宝账号并完成实名认证,如已有支付宝账号请选择下一步入驻流程。
475 0
Alibaba Cloud Toolkit 发布 RDS MySQL 插件,开发效率更“biu”了
阿里云RDS官方针对Alibaba Cloud Toolkit所有开发者推出了免费试用RDS MySQL实例,2019年3月31日前,任何Alibaba Cloud Toolkit使用者均可免费购买1台阿里云数据库MySQL基础版指定规格实例(1核1G+20GB SSD云盘,时长1个月,限1次)。
2389 0
使用Express3.0实现<Node.js开发指南>中的微博系统
特别说明:本实例仅在windows xp sp3系统下测试通过(其它系统未经过测试)。 这本书,之前有评论过,但之前并不清楚express2.x与3.x会有如此大的差异,导致在写例子的过程中痛苦不已。
847 0
使用 WordPress 插件模板开发高质量插件
  WordPress 插件样板是标准化的,有组织的,面向对象的基础,用于构建高品质的 WordPress 插件。样板遵循编码标准和文件标准,所以你不必自己学习这些,根据注释编写代码即可。     官方网站      源码下载   您可能感兴趣的相关文章 网站开发中很有用的 j...
613 0
Preact——无线端活动页的轻量级开发方案
> React开创了新的**避免手动操作DOM**方式——`JSX`,它不仅仅是一套库,而是一套标准。 ## 1、前言 React现如今已经成为前端开发者的首选技术了,它天生携带着组件化的理念,并且拥有极强的生态,如`Redux`,`Flux`等数据管理工具,`Material-UI`,`MUI`,`Ant.
5160 0
阿里大鱼短信发送接口开发
一、 API接口介绍 alibaba.aliqin.fc.sms.num.send (短信发送) 向指定手机号码发送模板短信,模板内可设置部分变量。使用前需要在阿里大于管理中心添加短信签名与短信模板。
11292 0
3
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载