2013-03-09 55 views
1

我已將此JavaScript放入我的HTML代碼中,嘗試在我的頁面上添加功能delete按鈕。我測試過這個腳本,如果它能夠識別點擊並且它確實發生了,但是它不會通過我的刪除路由,因爲此刻我只是測試路由,所以只放了一個簡單的控制檯日誌,但在這裏是代碼。有任何想法嗎?JavaScript/Expressjs - app.del()路線不工作

script(type = 'text/javascript') 
$('#teamDelete').live('click', function() { 
    var teamId = #{teamData.key}; 
    $.del('/team/' + teamId, function (response) { 
    console.log(response); 
    }); 
}); 

路線:

app.del('/team/:key', function(req, res) { 
    util.log('Serving request for url [DEL] ' + req.route.path); 
    util.log('success'); 
}); 

應用:

app.configure(function(){ 
    app.set('port', process.env.PORT || 3000); 
    app.set('views', __dirname + '/views'); 
    app.enable('jsonp callback'); 
    app.set('view engine', 'jade'); 
    app.set('view options', {layout : false}); 
    app.use(express.bodyParser()); 
    app.use(express.cookieParser()); 
    app.use(express.session({ 
    secret : 'secretsecret' 
    })); 
    app.use(express.methodOverride()); 
    app.use(express.static(__dirname + '/public')); 
    app.use(function(req, res, next){ 
    res.locals.session = req.session; 
    next(); 
    }); 
    app.use(app.router); 
}); 

/團隊

app.get('/team'/*, lim("Must be logged in to see teams")*/, getAllTeams, function(req, res){ 
    util.log('Serving request for url [GET] ' + req.route.path); 
    // Pass it the list of all Teams 
    res.render('team', {'teamsList' : req.teamsList}); 
    }); 

    /** 
    * POST /team 
    * Save new Team 
    */ 
    app.post('/team', function(req, res) { 
    util.log('Serving request for url [POST] ' + req.route.path); 

    // Output to console the contents of req.body 
    // console.log('body: ', req.body); 
    // console.log('body.teamForm: ', req.body.teamForm); 
    // console.log('body.teamForm.name: ', req.body.teamForm.name); 
    // console.log('body.teamForm.teamKey: ', req.body.teamForm.teamKey); 

    // Get data from teamForm 
    var teamForm = req.body.teamForm; 

    // Save team in teamForm as new Team 
    var name = teamForm.name; 
    var team = new Team(); 
    team.name = name; 

    // Save new Team to datbase 
    team.save(function(err){ 
     var message = ''; 
     var retStatus = ''; 
     // No error - Successful Save 
     if(!err){ 
     util.log('Successfully created new team: ' + name); 
     message = 'Successfully created new team: ' + name; 
     retStatus = 'success'; 
     } 
     // Error - Unsuccessful Save, show error 
     else { 
     util.log('Error while creating team: ' + name + ' error : ' + util.inspect(err)); 
     if(err.code === 11000){ 
      message = 'Team already exists'; 
     } 
     retStatus = 'failure'; 
     } 
     // Return whether the Save was successful 
     res.json({ 
     'retStatus' : retStatus, 
     'message' : message 
     }); 
    }); 
    }); 

    /** 
    * GET /team/:key 
    * Get Team details by key 
    */ 
    app.get('/team/:key', function(req, res) { 
    util.log('Serving request for url [GET] ' + req.route.path); 
    Team.findByKey(req.params.key, function(err, teamData){ 
     if(!err && teamData){ 
     teamData = teamData; 
     res.render('teamDetails', { 'teamData' : teamData }); 
     } else { 
     util.log('Error in fetching Team by key : ' + req.params.key); 
     res.json({ 
      'retStatus' : 'failure', 
      'msg' : 'Error in fetching Team by key ' + req.params.key 
     }); 
     } 
    }); 
    }); 

    /** 
    * DEL /team/:key 
    * Delete Team by key 
    */ 
    app.del('/team/:key', function(req, res) { 
    util.log('Serving request for url [DEL] ' + req.route.path); 

    util.log(req.params.key); 

    Team.remove(req.params.key, function(err){ 
     var message = ''; 
     var retStatus = ''; 
     if (!err) { 
     util.log('Successfully deleting Team with key: ' + req.params.key); 
     message = 'Successfully deleting Team with key: ' + req.params.key; 
     retStatus = 'Success'; 
     } else { 
     util.log('Error deleting Team with key: ' + req.params.key + 'Error: ' + util.inspect(err)); 
     res.json({ 
      'retStatus' : 'failure', 
      'msg' : 'Error in fetching Team with key ' + req.params.key 
     }); 
     } 
    }); 
    }); 

回答

1

$.del()不存在。您可以使用$.ajax生成DELETE請求,但它的安全使用$.post()

$.post('/team/' + teamId, { _method : 'delete' }, function(response) { 
    console.log(response); 
}); 

對於這個工作,你還需要使用快遞的methodOverride中間件(之前定義app.del路線):

app.use(express.bodyParser()); // this has to come before the next line 
app.use(express.methodOverride()); 
+0

所以使用這種方法我可以安全地在我的路線中使用app.del?我只需要確保我在我的中間件中使用'methodOverride',我確信我無論如何。 – germainelol 2013-03-09 15:31:04

+0

是的,'methodOverride'用於實現'特殊'請求類型,比如DELETE和PUT,它們並不總是被瀏覽器支持。我通過回答編輯,因爲您需要知道'bodyParser'中間件也必須加載(以及使用中間件的順序很重要)。 – robertklep 2013-03-09 15:34:11

+0

我已經實現了這一點,最初,當我點擊Team 1頁面上的刪除按鈕時,它已經登錄到它已被成功刪除的控制檯中......但它刪除了數據庫中的所有團隊,並且當我嘗試創建一個使用.post(/ team)路線的新團隊,根本不會創建任何團隊。任何想法? – germainelol 2013-03-09 15:42:31