【问题标题】:How do I delete an html list item from Redis database using Jade template?如何使用 Jade 模板从 Redis 数据库中删除 html 列表项?
【发布时间】:2013-10-09 06:03:44
【问题描述】:

我使用 node.js、express 和 jam 制作了一个非常简单的 ToDo List 应用程序(按照下面评论中的教程)。该应用程序有效,因此我可以将项目添加到列表中,并将其保存到 redis 数据库中,其 id 等于列表项的名称。

现在如何编辑我的玉模板,以便在列表项旁边显示一个删除按钮,当我单击它时,项目将从数据库中删除?

以下是相关代码:

Routes.js 文件

exports.index = function(req, res){
  res.render('index', { title: 'Welcome to JSPlayground Todo' });
};

var redis = require("redis"),
  client = redis.createClient();

exports.todo = function(req, res){ //Pulls items from database to display on page
  var todos = [];
  client.hgetall("Todo", function(err, objs) {
    for(var k in objs) {
      var newTodo = {
        text: objs[k]
      };
      todos.push(newTodo);
    }
    res.render('todo', {
      title: 'New Todo List',
      todos: todos
    });
  });
};

exports.saveTodo = function(req, res) { //Saves a list item from input box to database
  var newTodo = {};
  newTodo.name = req.body['todo-text'];
  newTodo.id = newTodo.name.replace(/ /g, '');
  //console.log(newTodo.id);
  //console.log(newTodo.name);
  client.hset("Todo", newTodo.id, newTodo.name);
  res.redirect("back");
};

tod​​o.jade 文件

h1 new todo list
form(action="/save", method="post")
  p
    label Enter a new todo item
    input(type='text',placeholder='new todo', name='todo-text')
  p
    input(type='submit', value='Save')
ul
  each todo in todos
    li #{todo.text} 

如果我在模板页面上做一个链接

a(href="/del") del

并在 routes.js 文件中将 /del 路由到该函数

exports.delTodo = function(req, res) {
  var delTodo = {};
  delTodo.id = "Test";
  client.hdel("Todo", delTodo.id);
  res.redirect("back");
};

它将删除 id 为“Test”的单个列表项。但我不知道如何让它删除被点击的特定列表项。

【问题讨论】:

标签: javascript jquery node.js redis pug


【解决方案1】:

改变

a(href="/del") del

a(href="/del/#{todo.id}") del

确保您已启用快速正文解析器。

app.user(express.bodyParser());

然后修改路由如下

app.routes('/del/:todo_id', delTodo);

然后在 routes.js 中访问它,如下所示。

exports.delTodo = function(req, res) {
  var delTodoId = req.params.todo_id;
  client.hdel("Todo", delTodoId);
  res.redirect("back");
};

【讨论】:

  • 这太棒了!我只有一个问题,如何让删除链接 a(href="/del/#{todo.id}") del 不呈现为 li 项内的文本?如果我使用 'li #{todo.text} a(href="/del/#{todo.id}") del' 会发生什么是玉渲染 a(href...) 的东西作为文本
  • 更简洁:如何将 'a(href="/del/#{todo.id}") del' 嵌套在 li 中?
  • 没关系!我只需要在 li 下直接添加链接代码,并带有 2 个额外的空格。你最好的,它现在工作得很好!非常感谢您的帮助,它真的帮助我学习
猜你喜欢
  • 2012-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-10
  • 1970-01-01
  • 1970-01-01
  • 2018-03-13
相关资源
最近更新 更多