Мне нужно подключить свою БД, а затем показать его на веб-странице - PullRequest
0 голосов
/ 19 июня 2019

Я застрял в моем проекте. Мне нужно создать небольшое веб-приложение, в котором вы можете управлять базой данных. Я использовал «сиквелизатор», чтобы создать систему входа Но теперь мне нужно записать MySQL-запрос, и я не понимаю, в каком файле это нужно сделать, где и как его подключить. Мои вопросы написаны после кода. Пожалуйста, помогите мне <3 </p>

Я понимаю, что мне не нужно снова подключаться к базе данных, потому что я уже сделал это, но во всех примерах, которые я видел, код запроса написан непосредственно в файле подключения. Но в моем случае это не сработает, я думаю.

app / 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('/');
    });

  }

app / models / 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');

}

}

server.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 ( 'общественный'));

Хорошо, теперь в чем мне нужна ваша помощь:

  1. Где мне нужно написать запрос MySQL?
  2. Мне нужен результат этого запроса на моей веб-странице, который называется "dashboard.hbs"
  3. А также Как заставить показывать данные на странице так же, как в mysql (я добавляю screnshot "mysql_example")

структура mysql_example

Я думаю, я хочу многого от вас, но мне действительно нужно сделать это за два дня. Прошу помочь <3 </p>

1 Ответ

0 голосов
/ 19 июня 2019

Я не использовал 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;

И это пример кода для вызова вашей модели. Вы можете назвать эту модель в вашем контроллере. Вы также можете сделать это, чтобы вернуть Обещание .
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);
   }
 })
})

}

Некоторые полезные ссылки:

https://www.npmjs.com/package/mysql

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...