【问题标题】:Use a mysql connection across my express js app在我的 express js 应用程序中使用 mysql 连接
【发布时间】:2016-01-15 23:40:36
【问题描述】:

我对 node.js 很陌生,所以请多多包涵。

我想知道如何获取一个 mysql 实例并在我的控制器中使用它。我有 4 个如下所示的文件:

在 controller.js 文件中查看我的评论

server.js:

var express = require('./config/express');
var app = express();
module.exports = app;
app.listen(3000);
console.log('server running');

express.js:

var express = require('express'),
bodyParser = require('body-parser'),
mysql = require('mysql');

module.exports = function() {
var app = express();

app.use(bodyParser.urlencoded({
    extended: true
}));

app.use(bodyParser.json());

app.set('views','./app/views');
app.set('view engine','ejs');

//NOT SURE WHAT TO DO HERE OR WHERE TO PUT THE CONNECTION DETAILS

var dbConnection = mysql.createConnection({
    host     : 'localhost',
    user     : 'someuser',
    database : 'somedb',
    password : 'somepass'
});

//connection.connect();
//
//connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
//    if (err) throw err;
//    console.log('The solution is: ', rows[0].solution);
//});
//
//connection.end();


require('../app/routes/index.server.routes.js')(app);

app.use(express.static('./public'));
return app;
};

routes.js:

module.exports = function(app) {
  var index = require('../controllers/index.server.controller');
  app.get('/', index.render);
  app.post('/', index.stuff);
};

controller.js:

 exports.render = function(req, res) {
   //DO DB STUFF HERE

   res.render('index', {
     title: 'this is the title'
   });
 };

exports.stuff = function(req, res) {
  res.render('index', {
    title: 'this is the title post'
  });
};

【问题讨论】:

标签: javascript mysql express


【解决方案1】:

要在控制器中使用连接实例,您需要将其从 express.js 文件传递​​到 controller.js 文件。第一步是将连接实例传递给路由器:

express.js

require('../app/routes/index.server.routes.js')(app, connection);

这将使它在 routes.js 文件中可用。然后,您需要将相同的连接实例传递给控制器​​。

index.server.routes.js

module.exports = function(app, connection) {
  var index = require('../controllers/index.server.controller')(connection);
  app.get('/', index.render);
  app.post('/', index.stuff);
};

控制器需要重构,所以它需要一个连接实例作为参数:

index.server.controller.js

function IndexController(connection) {
    controllerMethods = {};
    controllerMethods.render = function (req, res) {
        // You can use the connection instance here.
        connection.connect()
        // Run your query
        connection.end()
        ...
    };

    // Define other methods for the controller

    // Return the object that holds the methods.
    return controllerMethods;
}

module.exports = IndexController;

【讨论】:

  • 太棒了!这正是我一直在寻找的,非常感谢!如果您不介意,还有一个问题,在您的控制器中进行数据库连接是个好主意吗?人们会认为他们应该去模型。如果是这样,您能否提供一个模型和控制器如何相互交互的示例?
  • 在控制器中使用数据库连接不是一个好主意。我会尽快链接一个示例。
猜你喜欢
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 2014-11-09
  • 2013-09-15
  • 2019-09-08
  • 2018-12-26
  • 2023-01-16
  • 2015-05-18
相关资源
最近更新 更多