我被困在我的项目中了。我需要创建一个小型 Web 应用程序,您可以在其中管理数据库。 我使用“sequelizer”来制作登录系统。但现在我需要写下 MySQL 查询,但我不明白应该在哪个文件中完成它,或者在哪里以及如何连接它。 我的问题写在代码后面。请帮助我<3
我知道我不需要再次连接数据库,因为我已经这样做了,但在我看到的所有示例中,查询代码都是直接写入连接文件中的。但就我而言,我想这是行不通的。
应用程序/config/config.json:
{
"development": {
"username": "root",
"password": "1221",
"database": "nightgl",
"host": "localhost",
"dialect": "mysql"
},
"test": {
"username": "",
"password": null,
"database": "",
"host": "",
"dialect": "mysql"
},
"production": {
"username": "",
"password": null,
"database": "",
"host": "localhost",
"dialect": "mysql"
}
}
app/controllers/authcontroller.js:
var exports = module.exports = {}
exports.signup = function(req,res){
res.render('signup');
}
exports.signin = function(req,res){
res.render('signin');
}
exports.dashboard = function(req,res){
res.render('dashboard');
}
exports.logout = function(req,res){
req.session.destroy(function(err) {
res.redirect('/');
});
}
应用程序/模型/index.js:
"use strict";
var fs = require("fs");
var path = require("path");
var Sequelize = require("sequelize");
var env = process.env.NODE_ENV || "development";
var config = require(path.join(__dirname, '..', 'config', 'config.json'))[env];
var sequelize = new Sequelize(config.database, config.username, config.password, config);
var db = {};
fs
.readdirSync(__dirname)
.filter(function(file) {
return (file.indexOf(".") !== 0) && (file !== "index.js");
})
.forEach(function(file) {
var model = sequelize.import(path.join(__dirname, file));
db[model.name] = model;
});
Object.keys(db).forEach(function(modelName) {
if ("associate" in db[modelName]) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
auth.js:
var authController = require('../controllers/authcontroller.js');
module.exports = function(app,passport){
app.get('/signup', authController.signup);
app.get('/signin', authController.signin);
app.post('/signup', passport.authenticate('local-signup', { successRedirect: '/dashboard',
failureRedirect: '/signup'}
));
app.get('/dashboard',isLoggedIn, authController.dashboard);
app.get('/logout',authController.logout);
app.post('/signin', passport.authenticate('local-signin', { successRedirect: '/dashboard',
failureRedirect: '/signin'}
));
function isLoggedIn(req, res, next) {
if (req.isAuthenticated())
return next();
res.redirect('/signin');
}
}
服务器.js:
var express = require('express')
var app = express()
var passport = require('passport')
var session = require('express-session')
var bodyParser = require('body-parser')
var env = require('dotenv').config()
var exphbs = require('express-handlebars')
//For BodyParser
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
// For Passport
app.use(session({ secret: 'keyboard cat',resave: true, saveUninitialized:true})); // session secret
app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions
//For Handlebars
app.set('views', './app/views')
app.engine('hbs', exphbs({extname: '.hbs'}));
app.set('view engine', '.hbs');
app.get('/', function(req, res){
res.send('Welcome to Passport with Sequelize');
});
//Models
var models = require("./app/models");
//Routes
var authRoute = require('./app/routes/auth.js')(app,passport);
//load passport strategies
require('./app/config/passport/passport.js')(passport,models.user);
//Sync Database
models.sequelize.sync().then(function(){
console.log('Nice! Database looks fine')
}).catch(function(err){
console.log(err,"Something went wrong with the Database Update!")
});
app.listen(5000, function(err){
if(!err)
console.log("Site is live"); else console.log(err)
});
app.use(express.static('public'));
好的,现在我需要你的帮助:
- 我需要在哪里编写 mysql 查询?
- 我需要在我的网页上查询这些查询的结果,该结果称为“dashboard.hbs”
- 以及如何使页面上的数据显示与 mysql 中相同(我添加了 screnshot“mysql_example”)
我想我对你有很多要求,但我真的需要在两天内完成。求你帮忙<3
最佳答案
我没有使用过sequelize。 但是您可以使用类似的方法来向数据库发起原始查询。 这是我建立数据库连接的地方。 使用 mysql npm 包。
mysqlConnection.js
import mysql from "mysql";
import dotenv from "dotenv";
dotenv.load();
const mySqlConnection = mysql.createConnection( {
host : process.env.MYSQL_HOST,
port : process.env.MYSQL_PORT,
user : process.env.MYSQL_USER,
password : process.env.MYSQL_PASSWORD,
database : process.env.MYSQL_DATABASE,
multipleStatements : true,
connectTimeout : 1000000
} );
mySqlConnection.connect( ( error ) => {
if ( error ) {
throw error;
}
} );
export default mySqlConnection;
这是调用模型的示例代码。
您可以在 Controller 中调用此模型。
您还可以让它返回Promise。
model.js(比如说)
class UserModel {
constructor () {
}
fetchUsers = ( ) => {
return new Promise((resolve, reject) => {
let sqlQuery = `SELECT * FROM Users;`;
mysqlConnection.query( sqlQuery, (error, result ) => {
if (error){
reject( error );
} else {
resolve(result);
}
})
})
}
}
export default new UserModel();
您可以将参数传递给模型以获取特定用户。如下所示:
fetchUsers = ( parameters ) => {
return new Promise((resolve, reject) => {
let sqlQuery = `SELECT * FROM Users WHERE id = ${mysql.escape(parameters.userId)};`;
mysqlConnection.query( sqlQuery, (error, result ) => {
if (error){
reject( error );
} else {
resolve(result);
}
})
})
}
一些有用的链接:
关于javascript - 我需要连接我的数据库然后将其显示在网页上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56667006/