[英]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.