用nodejs做网站 - 5
数据库
传统建表就是直接用SQL写出来,在数据库中执行。但我不是很擅长这种事,于是我找了工具帮我处理。
Knex http://knexjs.org/
Knex.js is a "batteries included" SQL query builder for Postgres, MSSQL, MySQL, MariaDB, SQLite3, and Oracle designed to be flexible, portable, and fun to use.
首先让我们在项目中和全局都安装knex。因为我们用的是mysql,所以mysql的模块也要安装。
➜ npm install knex --save
➜ npm install knex -g
➜ npm install mysql --save
装好之后,别忘了检查一下。
➜ knex --versionKnex CLI version: 0.11.7Local Knex version: 0.11.7
初次使用的时候,可以用命令行创建一个配置文件。创建在项目的根目录中。
➜ knex init
Created ./knexfile.js
这个是创建knexfile.js里的默认内容。
// Update with your config settings.
module.exports = {
development: {
client: 'sqlite3',
connection: {
filename: './dev.sqlite3'
}
},
staging: {
client: 'postgresql',
connection: {
database: 'my_db',
user: 'username',
password: 'password'
},
pool: {
min: 2,
max: 10
},
migrations: {
tableName: 'knex_migrations'
}
},
production: {
client: 'postgresql',
connection: {
database: 'my_db',
user: 'username',
password: 'password'
},
pool: {
min: 2,
max: 10
},
migrations: {
tableName: 'knex_migrations'
}
}
};
我们之前写了一个config.js,里面就包含了数据库的设置。这个时候就需要我们合并一下了,合并之后就是下面这个样子了。
这当中使用了lodash这个库,这个库就是一个工具库。其中有很多的函数可以直接用,很方便。
A modern JavaScript utility library delivering modularity, performance, & extras.
var config = require('./config');
var _ = require('lodash');
var baseConfig = {
migrations: {
directory: './db/migrations'
}
}
module.exports = {
development: .extend(config.development.database, baseConfig),
staging : .extend(config.staging.database, baseConfig),
production : _.extend(config.production.database, baseConfig)
};
我们第一次做的更新就是创建users表,用于存储用户的信息。我们在knex的配置文件中设定了migrations的目录,所以直接生成在了那个个目录当中。
➜ knex migrate:make add-userUsing environment: developmentCreated Migration: /Users/limi/website/db/migrations/20160719121550_add-user.js
刚生成完,里面是什么都没有的。生成表的代码我们就写在这个地方,里面定义了更新和回滚的操作,分别放在up和down中。我们顺便在up中给users表插入了一条数据。
这里面用到了Promise,如果你不了解的话可以参考以下。
exports.up = function(knex, Promise) { return Promise.all([ // 创建表 knex.schema.createTableIfNotExists('users', function (table) { table.increments('id').primary().notNullable(); table.string('name').notNullable(); table.string('password').notNullable(); table.string('email').notNullable(); table.string('uuid').notNullable(); table.string('status').notNullable().defaultTo('active'); table.dateTime('created_at').notNullable(); table.dateTime('updated_at').nullable(); }), // 插入数据 knex.table('users').insert({ name: 'limichange', email: 'limichange@hotmail.com', password: 'asdfasdf', uuid: '1', created_at: new Date() }) ]);};exports.down = function(knex, Promise) { return Promise.all([ // 删除表 knex.schema.dropTable('users') ]);};
接下来用命令行工具来更新数据库。
➜ knex migrate:latest
Using environment: development
Batch 1 run: 1 migrations
/Users/limi/website/db/migrations/20160719121550_add-user.js
只要执行撤销的操作,就可以让数据库回滚。
➜ knex migrate:rollback
Using environment: development
Batch 1 rolled back: 1 migrations
/Users/limi/website/db/migrations/20160719121550_add-user.js
关键字:node.js
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!