nodejs和ejs配合起来的问题
问题是这样的:
前台想要修改的时候,点击修改,然后后台把mod_data给出去然后就可以修改。
我知道问题大概是default这里的问题,第一次点banner设置的时候是没有mod_data的,因此报错mod_data is not defined。
很想解决这个问题,卡了好久了。新手初学nodejs,还希望大家多多帮助。非常感谢大家。
应该就是switch那里的问题,如果不修改,希望可以正常显示,请问各位大牛该如何修改。
const express=require('express');
const common=require('../libs/common');
const mysql=require('mysql');
var db=mysql.createPool({
host:'localhost',
user:'root',
password:'158298232',
database:'learn'
});
module.exports=function(){
var router=express.Router();
//检查登录状态
router.use(function(req,res,next){
// 为了防止重定向次数过多,这里需要有双重条件
if(!req.session['admin_id']&&req.url!='/login'){
res.redirect('/admin/login');
}else{
next();
}
});
router.get('/login',function(req,res){
res.render('admin/login.ejs',{});
});
router.post('/login',function(req,res){
var username=req.body.username;
var password=common.md5(req.body.password+common.MD5_SUFFIX);
db.query(`SELECT * FROM admin_table WHERE username='${username}'`,function(err,data){
if(err){
res.status(500).send('database error').end();
}else{
if(data.length==0){
res.status(400).send('no this admin').end();
}else{
if(data[0].password==password){
req.session['admin_id']=data[0].id;
res.redirect('/admin/');
}else{
res.status(400).send('incorrect').end()
}
}
}
});
});
router.get('/',function(req,res){
res.render('admin/index.ejs',{});
});
router.get('/banners',function(req,res){
switch(req.query.act){
case 'mod':
db.query(`SELECT * FROM banner_table WHERE id=${req.query.id}`,function(err,data){
if(err){
console.error(err);
res.status(500).send('database error').end();
}else if(data.length==0){
res.status(404).send('data not found').end();
}else{
db.query('SELECT * FROM banner_table',function(err,banners){
if(err){
console.error(err);
res.status(500).send('database error').end();
}else{
res.render('admin/banners.ejs',{banners,mod_data:data[0]});
}
});
}
});
break;
case 'del':
db.query(`DELETE FROM banner_table WHERE id=${req.query.id}`,function(err,data){
if(err){
console.error(err);
res.status(500).send('database error').end();
}else{
res.redirect('/admin/banners');
}
});
break;
default:
db.query('SELECT * FROM banner_table',function(err,banners){
if(err){
console.error(err);
res.status(500).send('database error').end();
}else{
// 将banners数据返回给前端,供ejs文件使用
res.render('admin/banners.ejs',{banners});
}
});
break;
}
});
router.post('/banners',function(req,res){
// 先从req中取得各样的数据
var title=req.body.title;
var description=req.body.description;
var href=req.body.href;
// 如果title、description、href为空,则报错
if(!title|| !description|| !href){
res.status(400).send('arg error').end();
}else{
if(req.body.mod_id){ //修改
db.query(`UPDATA banner_table SET \
title='${req.body.title}',\
description='${req.body.description}',\
href='${req.body.href}',\
WHERE ID=${req.body.title}`,function(err,data){
if(err){
console.error(err);
res.status(500).send('database error').end();
}else{
res.redirect('/admin/banners');
}
}
);
}else{ //添加
// 将前端POST过来的数据插入数据库
db.query(`INSERT INTO banner_table (title,description,href) VALUE('${title}','${description}','${href}')`,function(err,data){
if(err){
console.error(err);
res.status(500).send('database error').end();
}else{
// 重定向到banners页面
res.redirect('/admin/banners');
}
});
}
}
});
return router;
};
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>index</title>
</head>
<body>
<div class="page">
<% include components/top.inc.ejs %>
<div class="content-wrap">
<div>
<form action="?" method="post">
标题:<input type="text" name="title"><br>
描述:<textarea name="description"></textarea><br>
链接:<input type="text" name="href"><br>
<input type="submit" value="添加">
</form>
</div>
<table border="1" width="100%">
<thead>
<tr>
<th>ID</th>
<th>title</th>
<th>description</th>
<th>href</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<% for(var i=0;i<banners.length;i++){ %>
<tr>
<td><%=banners[i].id%></td>
<td><%=banners[i].title%></td>
<td><%=banners[i].description%></td>
<td><%=banners[i].href%></td>
<td>
<a href="?act=mod&id=<%=banners[i].id%>">修改</a>
<a href="?act=del&id=<%=banners[i].id%>">删除</a>
</td>
</tr>
<% } %>
</tbody>
</table>
<div>
<form action="?" method="post">
标题:<input type="text" name="title" value="<%=mod_data.title%>"><br>
描述:<textarea name="description"><%=mod_data.description%></textarea><br>
链接:<input type="text" name="href" value="<%=mod_data.href%>"><br>
<input type="submit" value="修改">
</form>
</div>
</div>
</div>
</body>
</html>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果仅仅是想解决未定义
mod_data
时报错的问题,你可以这样写:这个是要传递到模板中的数据对象。