我尝试使用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)
})
}
答案 0 :(得分:1)
DEL
应为DELETE
:
<input type='hidden' name='_method' value='DELETE' />
答案 1 :(得分:0)
我也在我的快速配置文件中设置了methodOverride()
发布此代码。它不是配置文件。它是对中间件功能的顺序高度敏感的代码。特别要确保bodyParser
出现在methodOverride
之前的app.router
。