NodeJS:在代码中连接数据库的位置?

Cri*_*oma 2 mysql database concurrency asynchronous node.js

我有一个在NodeJS上运行的简单快速服务器,我想在接收请求时执行数据库查询.我的设置看起来与此类似

var srv = require('express').createServer();
var db = new DbConnection(dsn);

srv.get('/', function (req, res) {
    var result = db.query(query);

    res.send(result);
});

srv.listen(80);
Run Code Online (Sandbox Code Playgroud)

我会遇到并发问题吗?如果同时处理两个请求并因此同时进行查询怎么办?

我也考虑过这种方法

srv.get('/', function (req, res) {
    var db = new DbConnection(dsn);

    var result = db.query(query);

    res.send(result);
});
Run Code Online (Sandbox Code Playgroud)

你做的最好的方法/做法是什么?

gen*_*nry 6

node.js性能的关键是永远不会阻塞线程.

var result = db.query(query);
Run Code Online (Sandbox Code Playgroud)

是不是没有.

db.query(query, function(result) {
  res.send(result);
});
Run Code Online (Sandbox Code Playgroud)

是应该处理查询请求的方式

连接一次应该没问题,大多数数据库都没有队列问题.

  • @Christian Toma你错过了关于节点的观点.每个IO都是非阻塞并处理异步的原因是因为它只是一个事件循环,一个单独的线程.如果你使它同步,那么在db服务器返回之前你将无法处理另一个请求,并且你的节点服务器将只是空闲.它是事件循环和非阻塞IO的组合,使节点如此之快. (3认同)