express.js中的客户端DEL请求

时间:2013-12-04 00:14:31

标签: javascript rest express

我尝试使用express.js设置一个简单的REST API。无法从客户端实现删除功能。

路线:

module.exports = function(server) { 
  server.get('/entries/:id', entries.get)    // working
  server.del('/entries/:id', entries.destroy)// not working
}

我有一个像这样设置的虚拟删除按钮(使用handlebars.js):

<form id='deleteform' action={{path}} method='POST'>
  <input type='hidden' name='_method' value='DEL' />
  <input type='hidden'  name='_csrf' value={{csrf_token}} />
  <button class='submit' type='submit' name='DELETE'>
</form>

当我点击按钮时,我得到&#34;不能发布/条目/ 1386113642&#34;或者我设置{{path}}的其他网址 - 但是,对同一网址的GET请求工作正常。我也在我的快速配置文件中设置了methodOverride()。我在这做错了什么?

编辑:这是我的整个app.configure()调用:

    app.configure(function() {
        app.use(function(req, res, next) {
            res.locals.pkg = pkg
            next()  
        })
    app.use(express.favicon())
    var rootPath = path.normalize(__dirname + '/..')
    var basePath = path.normalize(__dirname + '/../..')
    app.use(express.static(rootPath + '/public'))
    app.use(express.static(basePath + '/backbone/'))
    app.set('views', __dirname + '/../../static')
    app.engine('hbs', exphbs({
       defaultLayout: 'main',
       extname: '.hbs',
       partialsDir: '../static',
       layoutsDir: '../static/layouts'
    }))
    app.set('view engine', '.hbs')
        app.use(express.cookieParser())
        app.use(express.bodyParser())
        app.use(express.methodOverride())
        app.use(express.session({
            secret: 'aekugwieufgkdjfhaisuefhwijfeijf',
            store:  new RedisStore({host:'localhost', port: 6379, client: redis })
        }))

    app.use(function(req, res, next) {
      res.locals.csrf_token = req.session._csrf
      next()
    })

        if (process.env.NODE_ENV !== 'test') {
                app.use(express.csrf())
            }
    app.use(app.router) 
  })
}

2 个答案:

答案 0 :(得分:1)

DEL应为DELETE

<input type='hidden' name='_method' value='DELETE' />

答案 1 :(得分:0)

  

我也在我的快速配置文件中设置了methodOverride()

发布此代码。它不是配置文件。它是对中间件功能的顺序高度敏感的代码。特别要确保bodyParser出现在methodOverride之前的app.router