Hapi+MySql项目实战数据库操作(四)
数据库访问
下面以Node的ORM框架Sequelize来操作数据库,Mysql为例。
配置数据库连接信息config/db_config.js:
//db_config.js
module.exports = {
database: 'h_api',//库名
username: 'root',//用户名
password: '123456',//密码
host: 'localhost',//数据库地址
dialect: 'mysql'//数据库类型
}
定义用户模型文件modes/user.js,表映射
//user.js
module.exports = function(sequelize, DataTypes) {
var User = sequelize.define("user", {
id:{
type: DataTypes.INTEGER,
primaryKey:true,
allowNull:false,
autoIncrement: true,
},
name:DataTypes.STRING,
sex:DataTypes.BIGINT,
age:DataTypes.INTEGER,
},{
freezeTableName: true, // Model 对应的表名将与model名相同
timestamps: false
}); return User;
};
创建一个sequelize对象实例,连接数据库models/index.js新增代码如下:
//index.js
const Fs = require("fs");
const Path = require("path");
const Sequelize = require("sequelize");
const Config = require('../config/db_config');
let db = {};
//创建一个sequelize对象实例,连接数据库
let sequelize = new Sequelize(Config.database, Config.username, Config.password, {
host: Config.host,
dialect: Config.dialect,
pool: {
max: 5,
min: 0,
idle: 30000
}
}); Fs.readdirSync(__dirname).filter(function (file) {
return (file.indexOf(".") !== 0) && (file !== "index.js");
}).forEach(function (file) {
var model = sequelize["import"](Path.join(__dirname, file));
db[model.name] = model;
});
db.sequelize = sequelize;
module.exports = db;
配置server.js,代码如下:
//server.js
const models=require('./models');
//Connect database
var initDb = function(){
var sequelize = models.sequelize;
//Determine if the database connection is successful
sequelize.sync({force: false}).then(function() {
console.log("connection database successed");
}).catch(function(err){
console.log("connection failed due to error: %s", err);
});
};
initDb();
配置数据库完毕后,在路由handler中使用这个实例
routes文件夹下新建login.js,代码如下:
//login.js
const Joi = require('joi');
const controllers = require('../controllers'); let login = {
method: 'get',
path: '/login',
handler: controllers.user.login
};
module.exports = login;
controllers文件夹新建index.js,遍历指定目录,require()每个文件,并返回一个包含这些模块嵌套的hash结构,代码如下
//index.js
const requireDirectory = require('require-directory');
module.exports = requireDirectory(module);
controllers文件夹新建user.js,数据库操作
//user.js
let Models = require('../models') module.exports = {
login: function (request, reply) {
return Models.user.findAll({
where: {
name: request.query.name
}
}).then(function (result) {
let reponseMess = {};
if (result !== null) {
reponseMess = {
code: 100,
message: 'success',
data: result
}
} else {
reponseMess = {
code: -100,
message: 'fail',
data: ''
}
}
return reponseMess;
});
}
};
老规矩,配置路由
输入地址:http://localhost:8090/login?name=1, 数据库自己新增一条name=1的记录
输出:json
//module.exports = [
//require(__dirname + '/hello.js'),
//require(__dirname + '/staticfile.js'),
require(__dirname + '/login.js')
//];
Hapi+MySql项目实战数据库操作(四)的更多相关文章
- Hapi+MySql项目实战环境初始化(一)
因为项目要求特殊的原因,公司要求使用Nodejs+HApi(纯英文的API)+Mysql构建新的项目.网上找了一堆资料,看了半天一脸懵逼.结论就是:版本的差异,资料国内几乎都是旧的17年前的了.根据资 ...
- Hapi+MySql项目实战自动化文档生成(四)
自动化生成swagger文档 使用hapi插件hapi-swagger,简单配置下插件,先修改下plugin_config.js文件: //plugin_config.js const Swagger ...
- Hapi+MySql项目实战配置插件-加载文件渲染母版(三)
加载插件 一般在其它node框架下,我们安装好插件直接require('插件')就能正常使用了,但是在Hapi下我们必须要Server.register()方法,才能正常使用插件.举个例子: serv ...
- Hapi+MySql项目实战路由初始化(二)
配置路由规则 将路由文件放在routes文件夹里,修改‘Server.js’文件,增加如下代码: 我们这里指明了require('./routes') routes文件夹,require可以文件但是不 ...
- Node.js 连接 MySQL 并进行数据库操作
Node.js 连接 MySQL 并进行数据库操作 按照这篇操作mysql的指引,我远程操作了我另一台电脑的mysql数据库. var mysql = require('mysql'); var c ...
- 【无私分享:ASP.NET CORE 项目实战(第四章)】Code First 创建数据库和数据表
目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 本章我们来介绍下Asp.net Core 使用 CodeFirst 创建数据库和表,通过 控制台 和 dotnet ef 两种 ...
- 海量数据MySQL项目实战
主要内容包含 MySQL 典型数据库架构介绍.MySQL 主流数据库架构对比等理论性知识,然后从“订单.用户”两个项目实战,抛砖引玉,介绍亿级互联网业务数据库项目如何设计. MySQL 典型数据库架构 ...
- 【慕课网实战】Spark Streaming实时流处理项目实战笔记十四之铭文升级版
铭文一级: 第11章 Spark Streaming整合Flume&Kafka打造通用流处理基础 streaming.conf agent1.sources=avro-sourceagent1 ...
- 【ASP.NET Core分布式项目实战】(四)使用mysql/mysql-server安装mysql
Docker安装Mysql 拉取镜像 docker pull mysql/mysql-server 运行mysql docker run -d -p : --name mysql01 mysql/my ...
随机推荐
- cogs 1176. [郑州101中学] 月考 Set 做法
1176. [郑州101中学] 月考 ★★☆ 输入文件:mtest.in 输出文件:mtest.out 简单对比时间限制:1 s 内存限制:128 MB [题目描述] 在上次的月考中B ...
- 使用git将本地文件提交到github存储库
1.首先你要安装git https://git-for-windows.github.io/ 去官网自行下载对应版本 2.安装好git服务器后,找到你项目的文件夹,右键git bash here打开命 ...
- Java.前端模板.Thymleaf
1. Input 日期格式化 <input id="renewalDate" name="renewalDate" th:value="${#d ...
- 初探ASP.NET Core 3.x (4) - 项目的重要组成
目录 O 前请提要 I 启动部分 I.1 Program类 I.2 Startup类 I.2.1 这个类干什么呢?? I.2.2 特征?? I.3 appsettings.json I.4 launc ...
- python 父类方法重写
class Bird: def isWing(self): print("鸟有翅膀") def fly(self): print("鸟会飞") class Os ...
- [bzoj4447] [loj#2010] [Scoi2015] 小凸解密码
Description 小凸得到了一个密码盘,密码盘被等分成 \(N\) 个扇形,每个扇形上有一个数字(0-9),和一个符号("+"或"*") 密码盘解密的方法 ...
- python多层数组合成一个数组后循环打印出数组内的每一项元素的方法
a=[1,2,3,4] b=[5,6,7,8] c=[a,b] def test(c): for i in c: return i print(test(c)) 以上代码执行后打印出来的结果是 预期目 ...
- Centos7搭建FastFDS----分布式文件服务系统服务端
一.FastDFS介绍 FastDFS开源地址:https://github.com/happyfish100 参考:分布式文件系统FastDFS设计原理 参考:FastDFS分布式文件系统 1.1简 ...
- JSTL (标准标签库)
JSTL(标准标签库) 作用: Web程序员能够利用JSTL和EL来开发Web程序,取代传统直接在页面上嵌入Java程序(Scripting)的做法,以提高程序的阅读性.维护性和方便性. 使用方法:J ...
- HBase学习总结
一.HBase介绍 1.基本概念 HBase是一种Hadoop数据库,经常被描述为一种稀疏的,分布式的,持久化的,多维有序映射,它基于行键.列键和时间戳建立索引,是一个可以随机访问的存储和检索数据的平 ...