一:demo

  

var mysql = require('mysql');
var connection = mysql.createConnection({
    host    : '192.168.0.2',
    port    : '3307',
    user    : 'radar',
    password: 'radar',
    database: 'radar'
});
connection.connect();
connection.query('select 1+1 as solution', function (error, results, fields){
    if (error) throw error;
    console.log('The solution is: ',results[0].solution);
});

  

二: 封装

config.js文件

module.exports = {
    host     : '192.168.0.2',
    port     : '3307',
    user     : 'radar',
    password : 'radar',
    database : 'radar',
}
 
 
db.js文件
var mysql = require('mysql');
var dbConfig = require('./db/config');
module.exports = {
    query : function(sql,param,callback){
        //每次使用的时候要创建链接,数据操作完之后要关闭连接    
        var connection = mysql.createConnection(dbConfig);
        connection.connect(function(err){
            if(err){
                console.log('数据库链接失败');
                throw err;
            }
            //开始数据库操作
            connection.query(sql, param, function(err,results,fields){
                if(err){
                    console.log('数据库操作失败');
                    throw err;
                }
                //将查询出来的结果返回给回调函数,这个时候就没有必要使用错误前置的思想了,因为我们在这个文件中已经为错误进行了处理,如果数据检索错误,直接会阻塞到这个文件中
                callback && callback(JSON.parse(JSON.stringify(results)), JSON.parse(JSON.stringify(fields)));
                //results作为数据操作后的结果,fields作为数据库连接的一些字段
                //停止连接数据库,必须要在查询数据库之后,不然一调用这个方法,就直接停止连接,数据操作就会失败
                connection.end(function(err){
                    if(err){
                        console.log('关闭数据库连接失败!');
                        throw err;
                    }
                })
            })
        })
    }
}
 
entrance.js
const express = require('express')
const app = express()
const bodyParser = require('body-parser')
// 我的基础路由文件
const db = require('./db.js')
app.get('/123',function(req,res){
  db.query('select * from device',(e,r)=>{
      if(e){
        res.status(200).json({"status":false,"msg":e,"data":[]});
      }
      res.status(200).json({"status":true,"msg":"","data":r});
  })
})
// json 解析 
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
//设置跨域访问
app.all('*', function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Content-Type,Content-Length, Authorization, Accept,X-Requested-With");
    res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
    res.header("X-Powered-By",' 3.2.1')
    next();
});
// 暴露公共资源
app.use(express.static('public'))
app.listen(8010)
console.log('app run port 8010')
 
 

最新文章

  1. 65行 JavaScript 代码实现 Flappy Bird 游戏
  2. Python入门笔记(10):字典
  3. Struts2+Jquery实现ajax并返回json类型数据
  4. selenium python (十二)下拉框的处理
  5. [Oracle] 使用触发器实现IP限制用户登录
  6. C++标准程序读书笔记-第三章错误和异常处理
  7. 从ACM中删除一个已经创建的Library
  8. TCP关闭过程
  9. Android Studio 安装后首次启动的 Config path ...... is invalid 问题(转)
  10. win10 uwp 读取文本GBK错误
  11. [知了堂学习笔记]_Jquery_Validate 表单校验的使用
  12. kafka实战kerberos
  13. 『超分辨率重建』从SRCNN到WDSR
  14. boost.asio包装类st_asio_wrapper开发教程(一)
  15. Ubuntu和centos离线安装软件包(apt和yum)
  16. Flask常用的钩子函数
  17. [Oracle]System 表空间的文件丢失
  18. ARM JTAG 信号 RTCK 应该如何处理?
  19. getViewTreeObserver
  20. SpookyOTP

热门文章

  1. leetcode-168周赛-1296-划分数字为连续数字的集合
  2. PHP面向对象----- 类的自动加载
  3. [JZOJ 5600] Arg
  4. Debian怎么配置网卡(IP)
  5. Python3 From Zero——{最初的意识:005~文件和I/O}
  6. 剑指offer——36二叉树和为某一值的路径
  7. tensorflow 模型加载(没有checkpoint文件或者说只加载其中一个模型)
  8. Red and Black 模板题 /// BFS oj22063
  9. 将sparkStreaming的结果保存到S3
  10. LightOJ 1151 Snakes and Ladders 期望dp+高斯消元