用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这个库,这个库就是一个工具库。其中有很多的函数可以直接用,很方便。

https://lodash.com/

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,如果你不了解的话可以参考以下。

  1. http://caniuse.com/

  2. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

  3. https://www.promisejs.org/

  4. http://caniuse.com/

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

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部