首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.js MySQL模型设计

问Node.js MySQL模型设计
EN

Stack Overflow用户
提问于 2016-08-17 00:28:59
回答 1查看 31.1K关注 0票数 15

我正在使用MySQL数据库开发一个node.js应用程序,但是我不得不在应用程序的node.js端创建模型。我以前使用过mongoose来生成模式,并使用模型来实现数据库功能,但我找不到对MySQL的支持。有没有人能推荐一个合适的方法来隔离我在node.js中的数据库函数,就像我在mongoose中所做的那样。这是我现在正在使用的app.js和用户模型。

app文件:

代码语言:javascript
复制
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");
});

用户(可能的型号)

代码语言:javascript
复制
var mysql= require("mysql");
var bcrypt = require("bcryptjs");

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");
    }
});

var User= {

}

User.createUser = function createUser(newUser) {
    bcrypt.genSalt(10, function(err, salt){
        bcrypt.hash(newUser.password,salt, function (err, hash) {
            newUser.password = hash;
            var query = sql.query("INSERT INTO USERS set ?", newUser, function (err, res) {
                console.log(query);
                if(err) {
                    console.log("error");
                }
                else{

                    console.log(res.insertId);
                }
            });
        });
    });

}

module.exports= User;
EN

回答 1

Stack Overflow用户

发布于 2018-10-31 00:25:26

你要找的东西叫做对象关系映射,Mongoose是一个用于MongoDB的(一个面向NOSQL文档的数据库)。

对于使用Node.js的关系数据库,还有其他ORM,目前最流行的是我个人使用和推荐的Sequelize。

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

想象一下下面的工作空间:

代码语言:javascript
复制
--models/
----User.js
----Permissions.js
--index.js

你的模型定义是这样的:

User.js

代码语言:javascript
复制
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

代码语言:javascript
复制
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中使用它们

代码语言:javascript
复制
let normalizedPath = require('path').join(__dirname, "models")
    require('fs').readdirSync(normalizedPath).forEach((file) => {
        sequelize.import('./models/' + file)
    })
    let {User, Permissions} = sequelize.models

现在您可以使用User和Permissions实例来控制它们,并调用如下函数

代码语言:javascript
复制
User.create({Username, Password})
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38980031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档