我正在使用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}
答案 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})
与常规#{}
一起使用,但不在引号之外。