nodejs和ejs配合起来的问题

发布于 2022-09-06 22:43:51 字数 6701 浏览 16 评论 0

问题是这样的:
前台想要修改的时候,点击修改,然后后台把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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

想挽留 2022-09-13 22:43:51

如果仅仅是想解决未定义mod_data时报错的问题,你可以这样写:

<%= locals.mod_data && locals.mod_data.title %>

这个是要传递到模板中的数据对象。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文