如何使用带有express的node.js上的方法来获取更新信息

时间:2016-05-12 17:50:37

标签: node.js express mongoose pug

我正在尝试使用带有express和mongoose的nodejs创建一个CRUD,当我尝试从表单更新内容时,当我使用POST方法执行此操作时,这会清空所有寄存器。这是我的代码:

玉模板

extends ../includes/layout

block content
  div(class="wrap")
    include ../includes/header
    div(class="column-group vertical-space")
      div(class="all-50 push-center")
        div(class="all-100")
          h1 #{title}
        div(class="all-100")
          form(role="form" method="post" action="#{project.id}" enctype="multipart/form-data")
            div(class="all-50")
              h3 Cambiar nombre a #{project.ProjectName}
              input(type="text" name="projectName" required)
              p Cambiar detalles
              textarea(name="details")
              p Cambiar precio
              input(type="number" name="ammount")
              p Cambiar localización
              input(type="text" name="localize")
            div(class="all-50")
              p Cambiar Imágen
              input(type="file" name="image" multiple)
              //p #{plane}
              //input(type="file" name="plane")
            div(class="all-100")
              button(type="submit") Enviar



    div(class="push")
  include ../includes/footer

控制器

saveEditProject : function (req, res, file){
      Project.findById(req.params.id, function(err, project){
        if(!project){
          res.redirect('/project');
        }
        project.ProjectName = req.body.projectName;
        project.ProjectDetails = req.body.details;
        project.ProjectAmount = req.body.ammount;
        project.ProjectLocation = req.body.localize;
        project.ProjectFileName = req.body.image;
        project.save(function (err) {
            if (err) {
                res.send("not now");
            }
            res.redirect('/project');
        });

      });
    },

路线

router.post('/edit/:id', controller.saveEditProject);

2 个答案:

答案 0 :(得分:2)

您需要使用PUT方法而不是POST。 要使用PUT,您需要先安装方法覆盖模块,可以通过以下方法完成... npm install method-override --save。

答案 1 :(得分:1)

BodyParser不适用于图片上传,因此请确保您的 server.js 中包含 multer

var multer  = require('multer')
var upload = multer({ dest: 'uploads/' })

然后只需按照他们的页面进行操作即可:

router.post('/edit/:id',  upload.array(), controller.saveEditProject);

这里的关键是使用处理图像的解析器。您在Jade表单中有以下属性:

enctype="multipart/form-data"

这将“禁用”BodyParser,因为它不会解释它。如果你把它拿出来,你会看到BodyParser正在工作。

PS:很抱歉没有给你更详细的答案,这是我现在可以给你的:)虽然他们的页面非常好,但我相信你会很容易找到解决方案!

快乐的编码!