node.js - 初学者:ejs+express怎么从数据库获取数据并输出至网页?
伊谢尔伦
伊谢尔伦 2017-04-17 11:40:03
0
4
487

我是看教程学习的,做一个简易评论区,但教程中只说了如何提交数据,但没说如何获取。现在一头雾水。
流程应该是:a.启动(app.js)-->b.查询(bbs_a.js)-->c.路由(routes/bbs.js)-->d.显示(views/bbs.ejs)
但是不知道如何具体操作,对这几个步骤之间的关系也不甚清楚,网上的教程都是含糊带过,有朋友能讲解一下吗?非常感谢!

这是我写的代码
更新bbs_a.js,旧的是我单独摘出来的read,实际上有save和read

app.js

var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var session = require('express-session'); var routes = require('./routes/index'); var bbs = require('./routes/bbs'); var app = express(); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); // uncomment after placing your favicon in /public //app.use(favicon(__dirname + '/public/favicon.ico')); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use('/', routes); app.use('/bbs', bbs); app.listen(8000); // catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); // error handlers // development error handler // will print stacktrace if (app.get('env') === 'development') { app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: err }); }); } // production error handler // no stacktraces leaked to user app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: {} }); }); module.exports = app;

在这里,我把存储数据和读取数据放在一起。但数据库操作很奇怪……不知道怎么操作才合理

bbs_a.js

var mysql = require('mysql'); var pool = mysql.createPool({ host: '127.0.0.1', port: '3306', user: 'root', password: '', database: 'sinatest' }); function Comment() {}; module.exports = Comment; pool.on('connection', function(connection) { connection.query('SET SESSION auto_increment_increment=1'); }); pool.getConnection(function(err, connection) { Comment.prototype.readComment = function (callback){ pool.query('SELECT comment FROM bbs', function(err, result) { console.log("invoked[readComment]"); callback(err, result); }); } });

bbs.js

var express = require('express'), router = express.Router(), Comment = require('../bbs_a.js'), TITLE_REG = '评论区'; router.get('/', function(req, res) { console.log("1"); var comment = new Comment(); comment.readComment(function(err, result) { if (err) { console.log("2"); res.status(404).end(err); } else { console.log("3"); res.render('bbs', { items: result }); } }); });

bbs.ejs

      

评论区

    <% for(var i=0; i
  • <%=item[i].comment %>
  • <% } %>

ps:我是看这个教程 http://www.cnblogs.com/zhongweiv/category/539147.html 学习的。写得很棒,特别是示例比较详细,而不只是讲原理。但并不能解决我的问题……

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

Antworte allen (4)
巴扎黑

简单来一发:
bbs.js

var express = require('express'), router = express.Router(), Comment = require('../bbs_a.js'), TITLE_REG = '评论区'; router.get('/', function(req, res) { var user = new User();//这里主要看你的构造方法是需要什么参数的 user.read(function(err,result){ if(err) { res.status(404).end(err); }else{ res.render('bbs', { items: result }); } }); });

bbs.ejs



    <% for(var i=0; i
  • <%=items[i].comment %>
  • <% } %>

没测试过大致就是这样,有问题,留言

    Peter_Zhu

    1.在bbs_a.js,你需要导出一个对象User

    module.exports = User;

    2.在bbs.js中,需要引入bbs_a.js的对象

    var User = require('bbs_a');

    3.调用User.read方法,获取数据

    router.get('/', function(req, res) { var comment = User.read ... //调用数据库方法,获取数据 res.render('bbs', { comment: comment //赋值,传到前台 }); });

    吐槽下,你的数据库方法有点奇怪啊。。。

    User.prototype.read = function read(callback)...
      刘奇

      修改成这样后,为什么还是会报错呢?

      bbs_a.js

      var mysql = require('mysql'); var pool = mysql.createPool({ host: '127.0.0.1', port: '3306', user: 'root', password: '', database: 'sinatest' }); function Comment() {}; module.exports = Comment; pool.on('connection', function(connection) { connection.query('SET SESSION auto_increment_increment=1'); }); pool.getConnection(function(err, connection) { Comment.readComment = function readComment(callback) { pool.query('SELECT comment FROM bbs', function(err, result) { console.log("invoked[readComment]"); callback(err, result); }); } });

      bbs.js

      var express = require('express'), router = express.Router(), Comment = require('../bbs_a.js'), TITLE_REG = '评论区'; router.get('/', function(req, res) { var comment = new Comment(); comment.readComment(function(err,result){ if(err) { res.status(404).end(err); }else{ res.render('bbs', { items: result }); } }); });

      运行后报错:

      G:\iamhere\bbs2\node_modules\express\lib\router\index.js:446
      throw new TypeError('Router.use() requires middleware function but got a
      ^ TypeError: Router.use() requires middleware function but got a Object

        小葫芦

        你应该有些js没有写:module.exports = router;

          Neueste Downloads
          Mehr>
          Web-Effekte
          Quellcode der Website
          Website-Materialien
          Frontend-Vorlage
          Über uns Haftungsausschluss Sitemap
          Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!