【问题标题】:PUT inside a POST request in expressJSPUT 在 expressJS 中的 POST 请求中
【发布时间】:2018-05-12 08:11:00
【问题描述】:

在搜索并尝试了很多不同的事情之后,我发现自己遇到了这个问题:我想发布内容并将 id 保存到属于另一个模式的对象,我正在使用猫鼬。

Project.findByid 正在寻找好的project,如果我在修改后登录project,项目就是我想要的,但保存部分不起作用。

我的问题是:是否可以在 POST 请求中执行 PUT 操作,我尝试删除第一个 .save 并且它也不起作用。

app.post('/pages', (req, res) => {
  var db = req.db;
  var name = req.body.name;
  var parent = req.body.parent;
  var myId = mongoose.Types.ObjectId();
  var new_content = new Content({
    name: name,
    _id: myId,
  })
  new_content.save(function (error, item) {
    if (error) {console.log(error)}
  })
  Project.findById(parent, 'content', function (error, project) {
    if (error) { console.error(error); }
    project.content[name] = myId;
    project.save(function (error) {
      if (error) {
        console.log(error)
      }
      res.send({
        success: true
      })
    })
  })
})

【问题讨论】:

  • 我不确定你想做什么,但你不能在 POST 中进行 PUT,但你绝对可以在一个 POST 操作中执行多个 save()

标签: express post mongoose put


【解决方案1】:

简单地使用

app.all(path, callback [, callback ...])

代替

app.post

更多信息在这里ExpressJS Docs

【讨论】:

  • 我做了你的修改,但没有任何影响(但 ExpressJs 文档非常有趣)。我做了一些测试,如果我尝试编辑 project.domain 这是一个字符串并且已经存在,那么保存功能可以工作。似乎更多的是与未更新的对象 content 相关的问题。
  • 您确定正在发送您发布(发送)的值吗?
  • 是的,我可以使用 console.logs 跟踪它们,直到函数结束,并且在它的每个阶段,在进行更多测试之后,这里就是我所在的位置:project.content = {foo : myId}; 有效,但删除了 prev 值. project.content = {foo: myId, bar: myId}; 测试多,工作。 tmp = {}; tmp[name] = myId; project.content = tmp; 这也有效,但同样的问题,它删除了以前的 project.content 值。 tmp = project.content; tmp[name] = myId; project.content = tmp; 这不起作用,project.content 不会改变 val。
  • 我真的不明白你的意思,但是如果你发布多个值,那么你必须使用数组来做 ut 因此你需要创建一个循环并将保存方法放在循环内
  • 我的模型中有一个值content,它包含一个object,我希望能够在我提出请求时向这个对象添加一个新项目,但我能做到的最好现在是用我不想做的其他东西完全替换我的内容对象。
猜你喜欢
  • 2011-10-06
  • 1970-01-01
  • 2017-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多