【问题标题】:how to render mysql data to jade file?如何将mysql数据渲染到jade文件?
【发布时间】:2016-06-01 21:40:09
【问题描述】:

我使用 express ~4 和 mysql 来存储数据。我能够创建用户数据库和 user_info 表。当我点击注册页面的创建按钮时,数据库正在更新,我被重定向到用户页面,该页面应该呈现包含用户信息的 show.jade 文件,即电子邮件地址和用户名。但它显示用户未定义。 locahost:3000/myusers 的管理页面按预期显示了数据库中所有用户的列表,但没有显示用户名

请帮忙

根目录下的app.js文件

app.js 文件

    var express = require('express');

    var mysql = require('mysql');

    var path = require('path');

    var favicon = require('serve-favicon');

    var logger = require('morgan');

    var cookieParser = require('cookie-parser');

    var bodyParser = require('body-parser');

    var routes = require('./routes/index');

    var users = require('./routes/users');

    var app = express();
    // view engine setup

    app.set('views', path.join(__dirname, 'views'));

    app.set('view engine', 'jade');

    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('/users', users);

    // mysql initialization

    var connection = mysql.createConnection({

            host     : 'localhost',

            user     : 'root',

            password : 'root',

            database : 'user'
        });

    // Database setup

    connection.query('CREATE DATABASE IF NOT EXISTS user', function (err) {

        if (err) throw err;

        connection.query('USE user', function (err) {

            if (err) throw err;

            connection.query('CREATE TABLE IF NOT EXISTS user_info('

                + 'email VARCHAR(30) NOT NULL,'

                + 'username VARCHAR(30) NOT NULL,'

                + 'PRIMARY KEY(username),'

                + 'password VARCHAR(15) NOT NULL'

                +  ')', function (err) {

                    if (err) throw err;

                });
        });

    });


    //index


     app.get("/myusers",function (req,res){

      connection.query('SELECT * from user_info',function (err,results){

        res.render('users/index',{users: results });

      });

     });


    //SIGNUP


    app.get("/myusers/signup",function (req,res){

      res.render('users/signup');

    });


    //CREate


    app.post("/myusers",function (req,res){

     var email = req.body.email;

     var userName = req.body.userName;

     var password = req.body.password;

     connection.query('INSERT INTO user_info (email, username, password) VALUES (?,

    ?, ?)', [email, userName, password], function(err, results) {

          if (err) res.json(err);

        res.redirect('/myusers/'+email);



    }) 

      });


    app.param('name',function(req,res,next,email){

      connection.query('SELECT * from user_info where email=?',[email],function 

    (err,row){

        if (err) res.json(err);

         req.user=row[0];


         next();

      });

     })

     //SHOW

    app.get('/myusers/:email',function(req,res){

     res.render("users/show",{user:req.user});


     });

    // 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

        });

      });

    }

    app.use(function(err, req, res, next) {

      res.status(err.status || 500);

      res.render('error', {

        message: err.message,

        error: {}

      });

    });

    module.exports = app;

index.jade 文件


views/user 文件夹中的 index.jade 文件

    h1 All Users

    ul

     each user in users

       li: a(href="/myusers/#{user.email}") #{user.userName} (#{user.email})

signup.jade 文件


views/user 文件夹中的 index.signup 文件

    h1 new user

    form(method="POST" action="/myusers")

      table

        tr

          td User Email:

          td

            input#email(type="email", name="email")

        tr

          td Username:

          td

            input#userName(type="text", name="userName")

        tr

          td Password:

          td 

            input#password(type="password", name="password")

        tr

          td

            button(type="submit") Create

show.jade 文件


views/user 文件夹中的 show.signup 文件

    h1 #{user.email}

    ul

      li Email:#{user.email}

      li Username:#{user.usernName} 

【问题讨论】:

  • 当用户似乎没有在任何地方定义时,您调用“alert(user)”。你可能会提醒“req.user”。 req.user 里面有数据集吗?
  • 还是同样的问题
  • connection.query('SELECT * from user_info set=?where email=?',[{req.user,email}],function (err,row)
  • 我应该做这样的事情吗,我是新手
  • 如果没有设置这个变量,则必须通过某种方式获取用户,然后将其传递给玉模板。

标签: mysql node.js express pug


【解决方案1】:

如果我没记错的话(大约一个月前我正在研究这个,但目前没有时间去测试你的代码),Jade 有 2 种格式用于根据情况插入变量:

1) 常规方法:

  li Email:#{user.email}

  li Username:#{user.usernName}

2) 在处理li a(href="/myusers/#{user.email}") 等引号时,您必须稍作不同:

  li a(href="/myusers/"+user.email)

没有#{},但有+,而且变量必须在引号之外

这只是翡翠的一个时髦之处。

顺便说一句,我知道 2) 有效,因为那是我使用的。但是,我不确定您是否可以将 li a(href="/myusers/"#{user.email}) 与常规 #{} 一起使用,但在引号之外。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-01
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 2014-03-01
    • 1970-01-01
    相关资源
    最近更新 更多