简体   繁体   English

node.js,在我的app.post请求中不表达任何正文对象

[英]node.js, express no body object inside my app.post request

I have a problem with node.js and express, I try to get infos from a post coming from an html file, and the problem is that when I do a console.log of my request i don't have any information inside my req.body. 我在使用node.js进行表达时遇到问题,我尝试从html文件中获取信息,而问题是当我执行请求的console.log时,我的请求中没有任何信息。身体。

I did a console.log(req.body) at the beginning of my app.post("/render_pdf" ....) and all i've got is a empty object. 我在app.post(“ / render_pdf” ....)的开头做了console.log(req.body),我得到的只是一个空对象。

I don't know if it's coming from my .html or my server.js but i don't understand where the problem is coming from. 我不知道它是来自我的.html还是我的server.js,但我不知道问题出在哪里。 I used multer to upload a pdf based on a html select and it's working .. so i don't have any solutions on this. 我用multer上传了一个基于html select的pdf文件,它正在工作..所以我对此没有任何解决方案。

my html (with a bit of php) : 我的html(带有一点php):

<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>ebook-stage</title>
  <link href="public/css/bootstrap.min.css" rel="stylesheet">
</head>

<body>

<?php
$pdo=new PDO('mysql:host=localhost; dbname=ebook-stage; charset=utf8',
    'root', '');
$statement=$pdo->prepare("SELECT * FROM publication");
$statement->execute();
?>

  <div class="jumbotron">
    <div class="container-fluid">
      <div class="row">
        <div class="col-md-3">
          <form method="POST" action="http://localhost:8090/create_pdf" enctype="multipart/form-data">
            <label for="extractor">Extracteur PDF</label>
            <br><select class="form-control" name="extractor" id="extractor">
              <option name="pdf2json" value="pdf2json">PDF2JSON</option>
              <option name="pdfextract" value="pdfextract">PDFEXTRACT</option>
              <option name="textract" value="textract">TEXTRACT</option>
            </select>
          <br><label for="file">Upload Pdf</label>
          <input id="file" type="file" name="file">
          <br><input type="submit" name="submit" id="submit" class="exec btn btn-success" value="Exécuter">
          </form>
        </div>
        <div class="col-md-3">
          <form method="POST" action="http://localhost:8090/render_pdf">
            <label for="require">PDF a afficher</label>
            <br><select class="form-control" name="require" id="require">
              <?php while ($rendername = $statement->fetchObject()):?>
                <option name="<?= $rendername->name ?>"><?= $rendername->name ?></option>
              <?php endwhile; ?>
          </select>
            <?php while ($rendername = $statement->fetchObject()):?>
            <input type="hidden" name="<?= $rendername->id ?>" id="id">
            <?php endwhile; ?>
            <br><input type="submit" name="envoi" id="envoi" class="exec btn btn-success" value="Afficher">
          </form>
        </div>
      </div>
    </div>
  </div>
</body>
</html>

my pdf-rest.js : 我的pdf-rest.js:

var mysql = require('mysql');
var bodyParser = require('body-parser');
var request = require('request');
var jsonParser = bodyParser.json();
var http = require('http');
var fs = require('fs');
var Promise = require('bluebird');
var multer  = require('multer');
var textract = require('textract');
var pdf_extract = require('pdf-extract');
var PDFParser = require("pdf2json");
var pdfParser = new PDFParser();
var inspect = require('eyes').inspector({maxLength:20000});
var optionsExtract = {
    type: 'ocr' // perform ocr to get the text within the scanned image
};
var express = require('express');

module.exports = function(app){

    function requireDB(){
        connection.connect();
        connection.query('SELECT * FROM publication WHERE id = 105', function(err, rows, fields){
            console.log(err);
            res.end(rows[0].id+rows[0].name);
        });
    }

    app.post('/render_pdf', jsonParser, function (req, res) {
        console.log(req);
        res.end('affichage pdf');
    });

    var destination = "uploads";
    app.post('/create_pdf', jsonParser, function (req, res) {
        console.log(req.body);
        var connection = mysql.createConnection({
            user: 'root',
            password: '',
            host: 'localhost',
            port: 3306,
            database: 'ebook-stage'
        });

        var filename = "" + Date.now() + ".pdf";
        var filePath = "C:\\wamp64\\www\\ebook-stage\\backend\\rest\\uploads\\" + filename;
        var storage = multer.diskStorage({
            destination: function (req, file, cb) {
                cb(null, destination);
            },
            filename: function (req, file, cb) {
                cb(null, filename);
            }
        });

        var upload = multer({storage: storage}).single('file');
        function uploadFile() {
            console.log('entering upload file');
            var uploadFilePromise = new Promise(function (resolve,reject) {
                upload(req, res, function (err) {
                    if (err) {
                        reject(err);
                        res.end('error uploading file')
                    }
                    else{
                        console.log('upload resolve');
                        res.end('pdf uploaded');
                        console.log(req.body);
                        resolve(req);
                    }
                });
            });
            return uploadFilePromise;
        }

        function insertDB(pdfObject) {

            connection.connect();
            var insertPublication = {name: pdfObject.originalFilename};
            new Promise(function (resolve, reject) {
                connection.query('INSERT INTO publication SET ?', insertPublication, function (err, res) {
                    if (err) {
                        reject(err);
                    }
                    else {
                        console.log('insertDB publication');
                        console.log(res);
                        resolve(res['insertId']);
                    }
                });
            }).then(function (pubId) {
                pdfObject.text.forEach(function (text) {
                    var insertContent = {type: 'TXT', content: text};
                    new Promise(function (resolve, reject) {
                        connection.query('INSERT INTO content SET ?', insertContent, function (err, res) {
                            if (err) {
                                console.log(err);
                                reject(err)
                            }
                            else {
                                console.log('insertDB content');
                                console.log(res);
                                resolve(res['insertId']);
                            }
                        });
                    }).then(function (insertBlock) {
                        var blockid = {contentid: insertBlock};
                        new Promise(function (resolve, reject) {
                            connection.query('INSERT INTO block SET ?', blockid, function (err, res) {
                                if (err) {
                                    console.log(err);
                                    reject(err);
                                }
                                else {
                                    console.log('insertDB block');
                                    console.log(res);
                                    resolve(res['insertId']);
                                }
                            });
                        }).then(function (blockId) {
                            var linkpublicationids = {blockid: blockId, publicationid: pubId};
                            connection.query('INSERT INTO linkpublication SET ?', linkpublicationids, function (err, res) {
                                if (err) {
                                    console.log(err);
                                    return err
                                }
                                else {
                                    console.log('insertDB linkpublication');
                                    console.log(res);
                                }
                            });
                        })
                    });
                });
            }).catch(function () {
                connection.end(function (err) {
                    console.log(err);
                })
            });
        }

        function textractPdf(originalFilename) {
                    console.log('TEXTRACT PDF');
                    var textBlockPromise = new Promise(function (resolve, reject){
                        textract.fromFileWithPath(filePath, function (error, text) {
                            var result = [{originalFilename: originalFilename}];

                            if (error) {
                                console.log('Text is not parsed');
                                reject(error);
                            }
                            else {
                                console.log('Text is parsed');
                                result[0].text = [];
                                result[0].text.push(text);
                                resolve(result[0]);
                                console.log('after resolve textract')
                            }
                        });
                    });
                    console.log('exiting textract');
                    return textBlockPromise;
                }

        function extractPdf(originalFilename) {
            console.log('EXTRACT PDF');
            var textBlockPromise = new Promise(function (resolve, reject){
                var result = [{originalFilename: originalFilename}];
                processor = pdf_extract(filePath, optionsExtract, function (err) {
                    if (err) {
                        console.log('error extract');
                        reject(err);
                    }
                });
                processor.on('complete', function (data) {
                    var resultsplited = data.text_pages[0].split('\n');
                    result[0].text = [];
                    resultsplited.forEach(function(text){
                        result[0].text.push(text);
                    });
                    resolve(result[0]);
                });
                processor.on('error', function (err) {
                    console.log('error extract');
                    inspect(err, 'error while extracting pages');
                    reject(err);
                });
            });
            return textBlockPromise;
        }

        function convertPdf2json(originalFilename){
            console.log('EXTRACT PDF2JSON');
            var textBlockPromise = new Promise(function (resolve, reject){
                var result = [{originalFilename: originalFilename}];
                result[0].text = [];
                pdfParser.on("pdfParser_dataError", function(errData){
                    reject(errData);
                });
                pdfParser.on("pdfParser_dataReady", function(pdfData){
                    pdfData.formImage.Pages.forEach(function(page){
                        page.Texts.forEach(function(text){
                            var textparsed = decodeURIComponent(text.R[0].T);
                            result[0].text.push(textparsed);
                        });
                    });
                    resolve(result[0]);
                });
                pdfParser.loadPDF(filePath);
            });
            return textBlockPromise
        }

        function selectExtractor(req){
            console.log(req.body.extractor);
            var extractorPromise = new Promise(function (resolve){
                if(req.body.extractor == 'textract'){
                    resolve (textractPdf(req.file.originalname));
                    console.log('extractor end');
                }
                else if(req.body.extractor == 'pdfextract'){
                    resolve(extractPdf(req.file.originalname));
                    console.log('extractor end');

                }
                else if (req.body.extractor == 'pdf2json'){
                    resolve(convertPdf2json(req.file.originalname));
                    console.log('extractor end');
                }
            });
            return extractorPromise;
        }
        uploadFile().then(selectExtractor).then(insertDB);
    });
};

my server.js : 我的server.js:

var express = require('express');

var app = express();

require('./pdf-rest.js')(app);

app.listen(8090);

Just try to update your server file to this actually to use req.body we need to register the middle-ware to all our routes. 只需尝试将服务器文件实际更新为该文件即可使用req.body,我们需要将中间件注册到我们的所有路由。

   var express = require('express');
    var bodyParser = require('body-parser');

    app.use(bodyParser.urlencoded({ extended: false }))
    var app = express();

    require('./pdf-rest.js')(app);

    app.listen(8090);

As you use multipart/form-data in your form, the body-parser probably won't help here. 当您在表单中使用multipart/form-data时,body解析器可能对此无济于事。 See body-parser home page : 参见body-parser主页

This does not handle multipart bodies, due to their complex and typically large nature. 由于其复杂且通常较大的性质,因此无法处理多部分实体。 For multipart bodies, you may be interested in the following modules: 对于多部分实体,您可能对以下模块感兴趣:

I have no experience with multer, but try using it as it's described in their documentation : 我没有关于multer的经验,但请尝试使用其文档中所述的方法

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

app.post('/create_pdf', upload.single('file'), function (req, res, next) {
  // req.file is the uploaded file
  // req.body will hold the text fields, if there were any 
})

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM