如何将mysql数据呈现给jade文件?

时间:2016-02-20 06:53:40

标签: mysql node.js express pug

我正在使用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文件

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

    h1 #{user.email}

    ul

      li Email:#{user.email}

      li Username:#{user.usernName} 

1 个答案:

答案 0 :(得分:0)

如果我没记错的话(大约一个月前我正在研究这个问题,但目前还没有时间去测试你的代码),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})与常规#{}一起使用,但不在引号之外。