Node.js:当我想编辑提供者时,响应为空

时间:2015-11-03 21:30:21

标签: javascript node.js

我正在创建一个包含create,get,update和delete提供程序的CRUD应用程序。

创建并获得完美的工作,但我的更新功能有问题。当我想得到答案时,它是空的。我不知道为什么在app.post("/proveedor/new"),function(req,res){console.log(req.body)});正在打印正文并在app.put("/proveedor/:id")....中他们没有给我数据。

extends ../layout.jade
block contenido
div(class="col-md-3 center-block no-float top-space")
    h1 Editar Proveedor
    form(method="POST" action="/proveedor/#{product.id}?_method=put" style="margin-top:1.5em;" enctype="multipart/form-data")   

        div(class="form-group")
            label Nombre
            input(type="text" value="#{product.title}" name="titulo" placeholder="Ingresa tu nombre" class="form-control")
        div(class="form-group")
            label Descripcion
            input(type="text" value="#{product.description}" name="descripcion" placeholder="Ingresa tu descripcion" class="form-control")
        div(class="form-group")
            label Costo
            input(type="nombre" value="#{product.pricing}" name="costo" placeholder="Ingresa costo" class="form-control")
        div(class="form-group")
            input(type="file" name="avatar")
        div(class="form-group")
            label Contrasena
            input(type="password" name="password" placeholder="Ingresa tu contrasena" class="form-control")     
        div(class="form-group text-right")              
            input(type="submit" class="btn btn-info" value="Guardar")

我的app.js

            var express = require('express');
            var mongoose = require('mongoose');
            var bodyParser = require('body-parser');
            var multer  = require('multer');
            var upload = multer({ dest: 'upload/'});
            var fs = require('fs');
            var cloudinary = require('cloudinary');
            var method_override = require("method-override");
            var app_password = "12345";

            var app = express();

app.put("/proveedor/:id",function(solicitud,respuesta){
console.log(solicitud.body);
if(solicitud.body.password == app_password){
    var data = {
        title: solicitud.body.title,
        description: solicitud.body.description,
        pricing: solicitud.body.pricing
    };

    if(solicitud.files.hasOwnProperty("avatar")){
        cloudinary.uploader.upload(solicitud.files.image_avatar.path, 
            function(result) {
                data.imageUrl = result.url;

                Product.update({"_id": solicitud.params.id},data,function(product){
                    respuesta.redirect("/menu");
                });
            }
        );          
    }else{
        Product.update({"_id": solicitud.params.id},data,function(product){
            respuesta.redirect("/menu");
        });
    }   


    }else{
        respuesta.redirect("/");
    }
});

1 个答案:

答案 0 :(得分:0)

我也是nodejs的新手。我认为问题可能是multipart / form-data帖子。即使您使用正文解析器,您仍然无法直接从您的多部分帖子中获取数据。

body-parser:由于它们复杂且通常较大,因此无法处理多部分主体。

因此,当您验证密码时,它不会永远传递,因为您的密码将是未定义的或什么也不是。 您需要multiparty来分析您的多部分帖子。

但是,我很困惑你说你可以在你的创建功能中打印一些东西。我认为它会打印未定义,但它没有。