【发布时间】:2016-12-23 03:09:26
【问题描述】:
我正在使用 MySQL 数据库开发一个 node.js 应用程序,但我一直坚持在我的应用程序的 node.js 端制作模型。我以前使用猫鼬来生成模式并使用模型来执行数据库功能,但我找不到对 MySQL 的这种支持。任何人都可以建议一种在node.js中隔离我的数据库功能的正确方法,就像我可以用猫鼬做的那样。这是我现在正在使用的 app.js 和用户模型。
应用文件:
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");
});
用户(可能的模型)
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;
【问题讨论】:
-
Sequelize 有一个非常好的模型框架,如果你需要它,或者一个很好的数据库层,如果你不需要它。不确定
set ?在这里应该是什么意思,通常是SET x=?,y=?, ...或更常见的是(name, ...) VALUES (?, ...) -
@tadman
set ?如果参数是字典,则替换以逗号分隔的 key=value 对列表,另请参见 the documentation,此处用作示例。 -
@Tanmoy node-mysql 似乎在 mysql 之上添加了一些建模功能(我实际上是在自己研究这个时发现了这篇文章),虽然我还没有完全理解它。
-
@JasonC 感谢您的澄清。以前从未见过这样做。