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

Posted

技术标签:

【中文标题】如何使用在 node.js 上的方法和 express 来获取更新信息【英文标题】:How to use method put on node.js with express for update info 【发布时间】:2016-09-08 17:08:47 【问题描述】:

我正在尝试使用带有 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);

【问题讨论】:

使用router.put. 以这种方式在浏览器上刚刚得到localhost:3000/project/edit/…,但数据库中没有保存任何内容 你确定project 不是null 吗? 当我渲染页面时,我可以获得 ej 的值。 #project.ProjectName 供阅读 你应该使用console.log来确定。 【参考方案1】:

您需要使用 PUT 方法而不是 POST。 要使用 PUT,您需要首先安装方法覆盖模块,它可以作为... npm install method-override --save.

【讨论】:

【参考方案2】:

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:很抱歉现在没有给你更详细的答案,这是我目前可以给你的:)他们的页面非常好,我相信你会很容易找到解决方案!

编码愉快!

【讨论】:

是这个,正确的地方是用muller for multer写的:) 你也是,编码愉快!

以上是关于如何使用在 node.js 上的方法和 express 来获取更新信息的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Node JS 上将 http 重定向到 https

node.js学习目录

在 Node.js 中管理数据库连接,最佳实践?

如何杀死 node.js 上的打开进程?

如何在 node.js 服务器上的 PHP Web 服务器和 Socket.io 之间创建握手?

我们如何在(Node.js 8. 目前)上的 readline.on 函数下使用 promise