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
});
}
});
});
所以使用這種方法我可以安全地在我的路線中使用app.del?我只需要確保我在我的中間件中使用'methodOverride',我確信我無論如何。 – germainelol 2013-03-09 15:31:04
是的,'methodOverride'用於實現'特殊'請求類型,比如DELETE和PUT,它們並不總是被瀏覽器支持。我通過回答編輯,因爲您需要知道'bodyParser'中間件也必須加載(以及使用中間件的順序很重要)。 – robertklep 2013-03-09 15:34:11
我已經實現了這一點,最初,當我點擊Team 1頁面上的刪除按鈕時,它已經登錄到它已被成功刪除的控制檯中......但它刪除了數據庫中的所有團隊,並且當我嘗試創建一個使用.post(/ team)路線的新團隊,根本不會創建任何團隊。任何想法? – germainelol 2013-03-09 15:42:31