【发布时间】:2018-08-12 17:58:15
【问题描述】:
我目前在数据库中使用 MySQL 而不是流行的 mongodb,因为在这种情况下,就架构和设置而言,没有太多文档。这是我目前的结构
client
-- angular files
routes
-- index.js
views
-- 404 page
app.js
我不明白如何在这个结构中实现控制器或模型。我目前正在从数据库中获取数据或将其与路由一起发送。我不确定添加的控制器层会做什么。也许这是一个愚蠢的问题,但我只想有一个明确的基线,以便我的项目能够很好地扩展。我觉得应该比我目前拥有的更多。
index.js
const express = require('express');
const mysql = require('mysql');
const router = express.Router();
const db = mysql.createConnection({
host : 'localhost',
user : 'root',
password : 'password',
database : 'db'
});
// Connect
db.connect((err) => {
if(err){
throw err;
}
console.log('MySql Connected...');
});
// Select Data
router.get('/getData', (req, res) => {
let sql = 'SELECT * FROM data';
let query = db.query(sql, (err, results) => {
if(err) throw err;
console.log(results);
res.send(results)
});
});
module.exports = router;
app.js
const express = require('express');
const mysql = require('mysql');
const bodyParser = require('body-parser');
const path = require('path');
const cors = require('cors');
const compression = require('compression');
const helmet = require('helmet')
const expressSanitizer = require('express-sanitizer');
const index = require('./routes/index');
const app = express();
const port = 3000;
var corsOptions = {
origin: 'http://localhost:8100',
optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204
}
// var logger = (req, res, next) => {
// console.log('logging...')
// next();
// }
//added security
app.use(helmet())
// //set logger
// app.use(logger)
//cors options
app.use(cors(corsOptions))
//body parser middleware
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: false}))
// Mount express-sanitizer here
app.use(expressSanitizer()); // this line follows bodyParser() instantiations
//set static path
app.use(express.static(path.join(__dirname, 'client')));
// set our default template engine to "ejs"
// which prevents the need for using file extensions
app.set('view engine', 'ejs');
//gzip compression
app.use(compression())
//set views for error and 404 pages
app.set('views', path.join(__dirname, 'views'));
app.use('/', index);
app.use('/fp/trips', trips);
app.listen(port, () => {
console.log('server started on port 3000')
})
【问题讨论】:
-
there isn't much documentation out there...这是选择关系数据库而不是非关系数据库的相对不好的理由。 MySQL 和 Mongo 做的事情非常不同。您在这里有什么数据需求?至于您的实际问题,如果您仍然无法让 MySQL 与 Node 一起工作,这在许多地方都有大量文档,那么您通常可能会遇到学习曲线问题。 -
就选择关系到非关系而言,我真的没有选择。就让它发挥作用而言,它确实有效——我只是觉得我在这里遗漏了一些东西。