추 신 : 질문이 길어 보일지 모르지만 아래에 초점이 맞춰진 질문이 있습니다.올바른 방법으로 ExpressJs + MySQL을 사용하는 방법
그래서 나는 합리적인 말로 표현을 통해 MySQL을 사용해야하는 불행한 소수의 사람들 중 하나입니다. 이것은 API 백엔드로 사용됩니다. 나는 그들의 사이트 (https://expressjs.com/en/starter/generator.html)에있는 생성기를 사용하여 익스프레스 앱을 생성하고 mysqljs (https://github.com/mysqljs/mysql)에서 mysql을 설치했다.
이제 익스프레스의 모든 예제는 MongoDb를 예제로 사용하며 래퍼 만 사용합니다. 그리고 mysqljs 예제는 그다지 알려주지 않는다. 여기 몇 가지 질문이있는 프로젝트 구조가 있습니다.
bin - auto generated files to start the app
config
models (Maybe have a base model which can talk to db wrapper and other models can extend that)
routes
.... index.js
.... users.js etc etc (each included in the app.js to have some sort of structure)
utils
.... db.js (check code below)
app.js
package.json
지금이 내가 (users.js 같이하는 index.js를) 내 db.js
var mysql = require('mysql');
var pool = mysql.createPool({
connectionLimit : 100,
host: 'localhost',
user: 'root',
password: 'notsoblank',
database: 'somedevdb'
});
module.exports = pool;
에 그리고 내 경로 파일이 무엇인지, 나는이로 사용하고 있습니다 :
그리고
var express = require('express');
var router = express.Router();
var db = require('../utils/db');
/* GET groups listing. */
router.get('/', function(req, res, next) {
db.getConnection(function(err, connection) {
var sql = 'SELECT * from groups';
connection.query(sql, function(err, rows, fields) {
if (err) throw err;
res.json(rows);
});
connection.release();
});
});
module.exports = router;
은 다음 app.js,이 위의 파일은 다음과 같이 포함됩니다 :
var express = require('express');
var path = require('path');
var logger = require('morgan');
var app = express();
var routes = require('./routes/index');
var users = require('./routes/users');
var groups = require('./routes/groups');
app.use('/apis/groups', groups);
module.exports = app;
이제이 앱을 실행하면 localhost:5000\apis\groups
과 같은 API 엔드 포인트를 갖게되며 다른 앱에서이를 사용할 수 있습니다. 나는 것을 수입하고
모든 경로 파일 (하는 index.js, users.js, groups.js)에서 db.js : 여기
이 기반으로 내 질문입니다. 이것은 우리가 API를 명중 할 때마다 db pool이 생성된다는 것을 의미합니까?나는 내 작업을 위해 많은 일반 SQL을 작성하려고한다. 이제는 많은 어댑터 또는 OEM이 있다는 것을 알고 있지만, getOne과 같은 메소드를 사용하여 간단한 래퍼를 작성하거나 추가 또는 삭제하는 등의 작업을 수행하는 것이 가장 좋습니다.
Connection.query는 약속을 반환합니다. 추가 조작을 원한다면 어떻게해야할까요?
db.js에 db 자격 증명을 유지하는 것 외에 다른 방법으로이 방법이 잘못되어 스케일링을 막을 수 있습니까?
아무도 사용하고 있지 않거나 엉터리 해결책 인 경우 불행합니다. 그렇지 않다. https://codeforgeek.com/2015/01/nodejs-mysql-tutorial/ – Amnon
과 같은 많은 자습서 중 하나를 통해 걷는 것이 좋습니다.이 방법을 포함하고 시작하는 방법에 대한 기본 예제 일뿐입니다. 아무도 당신이 시작한 후에 무엇을해야하는지 말하지 않습니다. 이미 연결 풀을 만들고 쿼리를 만들 수 있지만 코드 중복이 많이 발생하며 전체적으로보기가 어렵습니다. 그리고 때로는 요구와 사용 등으로 어떤 일이 일어나는지 알지 못합니다. –
sequelize 또는 다른 ORM을 사용하면 코드 관리에 장기간 도움이 될 수 있습니다. – Paul