我正在使用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");
});
答案 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})