无法使用 Node.js Express MongoDB Mongoose CoffeeScript 发布

Posted

技术标签:

【中文标题】无法使用 Node.js Express MongoDB Mongoose CoffeeScript 发布【英文标题】:Cannot POST with Node.js Express MongoDB Mongoose CoffeeScript 【发布时间】:2011-12-07 07:58:02 【问题描述】:

更新:我找到了解决方案,请查看本页底部...

我有一个用 CoffeScript 编写的 Node.js、Express、MongoDB、Mongoose 项目,我可以创建和读取数据,但我无法更新。

这就是我的代码的样子;

app.js

 # update
 app.put "/admin/:id.:format?", (req, res) ->
    Content.findById req.body.content.id, (err, c) ->
        c.title = req.body.content.title
        c.body = req.body.content.body
        c.save (err) ->
            switch req.params.format
                when "json"
                    res.send c.__doc
                else
                    res.redirect "/admin"

edit.jade

h2 Edit Content
form(method='post', action='/admin/' + c.id)
  input(name='content[id]', value=c.id, type='hidden')
  input(name='_method', value='PUT', type='hidden')
div
  label Title:
    input(name='content[title]', value=c.title || '')
div
  label Body:
    textarea(name='content[body]')=c.body || ''
div
  input(type='submit', value='Save')

这就是我的控制台所说的

127.0.0.1 - - [Thu, 13 Oct 2011 21:39:55 GMT] "POST /admin/4e96ec17fd7da7cb18000001 HTTP/1.1" 404 - "http://localhost:1234/admin/4e96ec17fd7da7cb18000001/edit" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_1) AppleWebKit/535.2 (Khtml, like Gecko) Chrome/15.0.874.83 Safari/535.2"

这是我的浏览器告诉我的

Cannot POST /admin/4e96ec17fd7da7cb18000001

【问题讨论】:

【参考方案1】:

我在http://expressjs.com/guide.html找到了解决方案:

"当在表单中使用 PUT 等方法时,我们可以利用一个名为 _method 的隐藏输入,它可以用来改变 HTTP 方法。为此,我们首先需要 methodOverride 中间件,应该放置在 bodyParser 下方,以便它可以利用包含表单值的 req.body。”

app.use express.bodyParser()
app.use express.methodOverride()

【讨论】:

【参考方案2】:

表单向服务器发送 POST 请求,但您的路由用于 PUT 请求。

【讨论】:

如果不明显,请使用form(method='put'... 修复它,或者像酷孩子一样使用 ajax 进行 PUT。 但是有一个 input(name='_method', value='PUT', type='hidden') 应该在 Express 中解决这个问题

以上是关于无法使用 Node.js Express MongoDB Mongoose CoffeeScript 发布的主要内容,如果未能解决你的问题,请参考以下文章

CRUD op Express.js Node.js Mysql 无法使用 MVC 插入

无法在我的 Node.js Express.js 应用程序中设置路由

无法使用 express 和 multer 运行 node.js 服务器以在节点中上传文件

使用 cors、express 和 google api 的 Node.js 服务器应用程序在 Azure 部署后无法正常工作

使用 Node.JS、Express 和 EJS 实现 browserify 的示例

Node.js,Express:将标头发送到客户端后无法设置标头