MP 新版本 [2 mysql sequelize 搭建数据库]

二 msqul sequelize 搭建数据库

正在发懵中
这里写图片描述

搭建网站后台数据库部分,本来想的是使用XAMPP 和ecshop .
但是之后说,我们的网站是node 配合 sequelize 进行数据库搭建。
okay,lets do it right now;

度娘告诉我关于sequelize:


1 http://www.cnblogs.com/showtime813/p/4512699.html
2 http://cnodejs.org/topic/5201c94144e76d216a39c4dc
3 http://blog.csdn.net/jimscx/article/details/45701921
4 http://my.oschina.net/zj0303/blog/305384
5 http://www.phperz.com/article/15/1113/169037.html
6 官方API在这里面


关于mysql

1 http://blog.chinaunix.net/uid-12707183-id-2918849.html
2 http://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html#d22
3 mysql常用指令

3 node mysql
1 http://yh.512876.com/diannao/479.html
2 http://www.jb51.net/article/80393.htm


以下是在摸索过程中的胡言乱语,不成体统

1 创建新的数据库 create database mindpush;
2 进入该数据库 use mindpush;
3 读出数据库的所有表 show tables;
4 读出某一个表中具体数据 select * from thisname;
5 删除其中某个表 drop table thisname;
6 清空某个表的所有数据 delete from thisname;
7 删除某一个数据库 drop database thisname;



通过mysql的cmd 建立一个名为mindpush的数据库,之后关于数据表的操作全部使用 node来进行。

创建一个数据表:
在项目中创建node.js

//实例化sequelize 数据库连接
var Sequelize = require('sequelize');
sequelize = new Sequelize('your database name ','root','password',{
    host: "localhost",
    port: 3306,
    dialect: 'mysql'
});
//实例化sequelize 数据库连接 --end

//创建表
var safety = sequelize.define('safety', {
    // auto increment, primaryKey, unique
    id : {type : Sequelize.INTEGER, autoIncrement : true, primaryKey : true, unique : true},
       // 这样的话,表中数据ID 会自己增加 ,不用自己写
    // comment
    title : {type : Sequelize.STRING, comment : 'Task title'},

    // allow null
    description : {type : Sequelize.TEXT, allowNull : true},

    // default value
    deadline : {type : Sequelize.DATE, defaultValue : Sequelize.NOW}
});

safety
     .sync({force: true})
     .then(function(res){
           console.log("res is" + res);
     })



//创建表 --end

运行一下
这里写图片描述

ok,这样创建了一个数据表,然后再mql的控制器中输入
show tables; 就可以读出有几个数据表了。
这里写图片描述

向表中增加数据,继续向node.js中添加

//插入数据
task
  .create({ description: 'John Doe', title: 'senior engineer' })
  .then(function(employee) {
    console.log(employee.get('description')); 
  })

//查找数据
task
    .findOne({ where: {title: 'senior engineer'} }).then(function(data) {
     console.log(data.description);
})


以下是控制台输出结果:
这里写图片描述

在查找数据的时候,也可以根据ID

safety.findById(1).then(function(employee) {
   console.log(employee.get('id')); 
})

使用查找or创建

safety
  .findOrCreate({where: {title: 'sdepold'},
                 defaults: {description: 'Technical Lead JavaScript'}})
 .spread(function(user, created) {
    console.log(user.get({
      plain: true
    }))
    console.log(created)

    /* 即相当于创建数据如下
      {
        title: 'sdepold',
        description: 'Technical Lead JavaScript',
        id: 1,
      }
      created: true
    */
  })

从表中删除数据

//  删除age 属性值为 34的数据
safety.destroy({
  where: {
    age: '34'
  }
});

更改表中数据

//将 age: '23' 的 title:更改为 what you mnjop
safety.update({
  title: 'what you mnjop',
}, {
  where: {
    age: '23'
  }
});

至此,最最基础的数据表增删改查功能过了一遍。

Then , 基本的功能尝试之后,继续学习。

Import

可以使用导入,将模型的定义文件独立写在一个文件中




// in your server file - e.g. app.js
var Project = sequelize.import(__dirname + "/path/to/models/project")

// The model definition is done in /path/to/models/project.js
// As you might notice, the DataTypes are the very same as explained above
module.exports = function(sequelize, DataTypes) {
  return sequelize.define("project", {
    name: DataTypes.STRING,
    description: DataTypes.TEXT
  })
}
The import method can also accept a callback as an argument.

sequelize.import('project', function(sequelize, DataTypes) {
  return sequelize.define("project", {
    name: DataTypes.STRING,
    description: DataTypes.TEXT
  })
})

下面来看看怎么模块化创建一个数据表;
将引入sequelize模块 和定义表结构分开
db.js

var Sequelize=require('sequelize');

exports.sequelize = function () {
    var sequelize=new Sequelize(config.db.database,config.db.user, config.db.password,{
        host:config.db.host,
        port:config.db.port,logging: console.log});

    return sequelize;
}

pro.js


var path = require('path');

module.exports.db = {
    host: "localhost",
    port: 3306,
    user: "root",
    database: "mindpush",
    password:"111111"
}

统一创建数据表
run.js


var config=require('./pro.js');

config.db = config.db;
global.config = config;

var sequelize=require('./db').sequelize();
var Sequelize=require('sequelize');


//批量创建数据表
sequelize.import('./security'); //创建数据表security


sequelize
    .sync()
    .then(function(result){
        console.log('success')
    });

security.js

module.exports = function (sequelize, DataTypes) {
    return sequelize.define('security', {
      id: { type: DataTypes.BIGINT(11), autoIncrement: true, primaryKey: true, unique: true, comment:'属性Id' },
      name: { type: DataTypes.STRING, allowNull: false, comment:'属性名' }
    },
    {
        underscore: false,
        timestamps: false,
        freezeTableName: true
    });
}

在node 中运行一下run.js ,然后就创建出一个security的数据表。



到今天已经大约半个月的时间了,做出来一个公司简介。

这里写图片描述
思路还是有点乱,简单总结一下。

从视图文件可以看出来,分两个方向,数据库与后端,前端与后台

这里写图片描述

先看一下web这条线。
这里写图片描述

这里写图片描述

这里普通页面contact渲染直接出来,但是需要后台数据的about ,就用的是require了一个模块

这里写图片描述

而这个模块中,封装了那些前端方法,比如join

看一下对应的前端怎么读出的后台数据:
这里写图片描述

然后看后台与数据库这条线:

路由
这里写图片描述

注: 【】里是中间件部分

这里写图片描述

这里写图片描述

最后到了这里,这是从路由到渲染出页面。

看到这个了吗
这里写图片描述

这就是用来与数据库进行连接的,
lib文件夹中,
这里写图片描述

data 中是数据表的增删改查的操作方法
model是创建的需要的数据表


这里写图片描述

其实这个网站的整体思路有是mvc风格来的,全称Model(模型)-View(视图)-Controller(控制器),这是一种开发模式,他的好处是可以将界面和业务逻辑分离。

Model(模型),是程序的主体部分,主要包含业务数据和业务逻辑。在模型层,还会涉及到用户发布的服务,在服务中会根据不同的业务需求,更新业务模型中的数据。(就是数据层)
View(视图),是程序呈现给用户的部分,是用户和程序交互的接口,用户会根据具体的业务需求,在View视图层输入自己特定的业务数据,并通过界面的事件交互,将对应的输入参数提交给后台控制器进行处理。
Controller(控制器),Controller是用来处理用户输入数据,已经更新业务模型的部分。控制器中接收了用户与界面交互时传递过来的数据,并根据数据业务逻辑来执行服务的调用和更新业务模型的数据和状态。

控制器对象是M与V之间的协调者。实现了功能模块和显示模块的分离,同时它还提高了应用系统的可维护性、可扩展性、可移植性和组件的可复用性。

注意点:
1 对于404页面的处理,最好在所有页面完成之后在操作,这样便于查看哪里出错
2 对于布局文件layout,当布局分为manage 和 web 的时候,需要在app.js 中改一下
这里写图片描述

到此整个网站基本完毕,说一说从开始到现在的无关技术的心得就是三个字,别放弃。

有什么问题,欢迎加QQ 2473536678 讨论哈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值