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 ...
随机推荐
- 带 sin, cos 的线段树 - 牛客
链接:https://www.nowcoder.com/acm/contest/160/D来源:牛客网 题目描述给出一个长度为n的整数序列a1,a2,...,an,进行m次操作,操作分为两类.操作1: ...
- 自定义博客cnblogs样式的必备前端小知识——js、jq
JQ.JS相关小知识 任意元素自动点击 $(".editicon").trigger('click') 添加子元素 append() - 在被选元素的结尾插入内容 prepend( ...
- C++数值计算
1.序 (1)程序设计分两种: 1.结构化设计(面向过程)——分解算法为模块,将算法的步骤分解为模块. 2.面向对象程序设计——主要是“类”与“对象”. (2)进制的转换 1.二进制转十进制 整数部分 ...
- 内置3D对象-Unity3D游戏开发培训
内置3D对象-Unity3D游戏开发培训 作者:Jesai 2018-02-12 19:21:58 五大面板: -Hierachy:当前场景中的物体 图 1-1 -Project:项目中的所有资源 图 ...
- Docker + node(koa) + nginx + mysql 线上环境部署
在上一篇 Docker + node(koa) + nginx + mysql 开发环境搭建,我们进行了本地开发环境搭建 现在我们就来开始线上环境部署 如果本地环境搭建没有什么问题,那么线上部署的配置 ...
- 做.net的成为 微软mvp 是一个目标吧。
mvp 的评比 需要好多好多 绩效考核 比如博客排名,比如发表的文章数.
- Maven的学习之路1
对于下列这段Maven的命令行有不懂之处,在zgmzyr的博客上得到了解释.非常感谢这位博友,写在自己的随笔上以便查看和修改. 1. 创建项目 $ mvn archetype:generate -Dg ...
- Dynamics CRM Tips
这里是作为开发中遇到的各式各样的问题的总结贴. 如果对Dynamics CRM 开发有兴趣, 请参考Step by Step 开发dynamics CRM 移除sitemap中的entity 从O36 ...
- laravel5.5的服务容器分析
简介 服务容器是Laravel的核心.见名知意,服务容器就是一个存放服务的地方,当我们需要某个服务的时候,我们就可以从这个容器中取出我们需要的服务.用更专业一点的术语来说,官网定义服务容器是这样的: ...
- PlayCanvas PBR材质shader代码分析(pixel shader)
#version es #define varying in out highp vec4 pc_fragColor; #define gl_FragColor pc_fragColor #defin ...