Node.js MySQL模型设计

时间:2016-08-16 16:28:59

标签: mysql node.js model

我正在使用MySQL数据库开发一个node.js应用程序,但我坚持在我的应用程序的node.js端创建模型。我之前使用mongoose来生成模式并使用模型来执行数据库功能,但我找不到对MySQL的这种支持。任何人都可以建议一种正确的方法来隔离我在node.js中的数据库函数,就像我可以用mongoose做的那样。这是我的app.js和用户模型我现在正在使用。

app文件:

$threadNb

用户(可能的型号)

var express= require("express");
var bodyParser = require("body-parser");
var mysql = require("mysql");
var UserModel= require("./models/User.js")
var app=express();

var sql = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "1234",
    database: "dricm"
});

sql.connect(function (err) {
    if(err){
        console.log("error");
    }else{
        console.log("connected");
    }
});

app.set("views", "./views");

app.use(express.static("node_modules/bootstrap/dist"));
app.use(express.static("public"));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false}));

app.get('/', function (req, res) {
    res.render("signup.jade");
});

app.post('/signup', function (req, res) {
    var obj= {
        username: req.body.username,
        password: req.body.password
    };
    UserModel.createUser(obj);
    res.redirect("/");
});

app.listen(3000, function () {
    console.log("server running at 3000");
});

1 个答案:

答案 0 :(得分:3)

您正在寻找的被称为ORM(对象关系映射)Mongoose是用于MongoDB(这是一个面向NOSQL文档的数据库)

还有其他可用于Node.js的关系数据库ORM,现在最受欢迎的是我亲自使用并推荐的Sequelize

使用Sequelize,您可以将模型像Mongoose一样放在不同的文件中,但是要加载它们,需要在index.js内添加一个简单的脚本

想象一下以下工作区:

--models/
----User.js
----Permissions.js
--index.js

您的模型定义是这样的:

User.js

const UserModel = (sequelize, Sequelize) => {
    const {INTEGER, STRING, FLOAT, BOOLEAN, DATE} = Sequelize
    const User = sequelize.define('User', {
        UserId: {type: INTEGER, primaryKey: true, autoIncrement: true},
        Username: {type: STRING, primaryKey: true, allowNull: false},
        Password: STRING
    })
    return User
}

module.exports = UserModel

Permissions.js

const PermissionsModel = (sequelize, Sequelize) => {
    const {INTEGER, STRING, FLOAT, BOOLEAN, DATE} = Sequelize
    const Permissions = sequelize.define('Permissions', {
        Role: {type: STRING, allowNull: false},
        ControllerAddress: {type: STRING, allowNull: false}
    })
    return Permissions
}

module.exports = PermissionsModel

现在,您需要使用以下脚本在index.js中使用它们

let normalizedPath = require('path').join(__dirname, "models")
    require('fs').readdirSync(normalizedPath).forEach((file) => {
        sequelize.import('./models/' + file)
    })
    let {User, Permissions} = sequelize.models

现在您可以使用User和Permissions实例来控制它们并调用类似的功能

User.create({Username, Password})