0

node.js、express、およびjadeを使用して、非常に単純なToDoリストアプリを作成しました(以下のコメントのチュートリアルに従います)。アプリが機能するので、リストに項目を追加でき、リスト項目の名前と同じ ID で redis データベースに保存されます。

リスト項目の横に削除ボタンが表示され、クリックすると項目がデータベースから削除されるように、jade テンプレートを編集するにはどうすればよいですか?

関連するコードは次のとおりです。

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");
};

todo.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

/delをroutes.jsファイルのこの関数にルーティングします

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

「Test」という ID を持つ単一のリスト項目を削除します。しかし、クリックされた特定のリスト項目を削除する方法がわかりません。

4

1 に答える 1

1

変化する

a(href="/del") del

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

Express Body パーサーが有効になっていることを確認してください。

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");
};
于 2013-10-02T19:07:51.270 に答える