2017-06-28 28 views
0

私は単純なフォーム提出コードを試しています。私はpostメソッドを使用しています。 マイserver.jsコードExpress nodejs req.body returns undefined

//N-4E;V-56;I-49 
//var http = require('http'); 
var express = require('express'); 
var bodyParser = require('body-parser'); 
var fs = require('fs'); 
var idx = require('./index.js'); 
var ra = require('./ra.js'); 

var app = express(); 

app.engine('html',require('ejs').renderFile); 
app.set('view engine', 'html'); 
app.set('port',process.env.PORT || 5649); 
app.use(bodyParser.urlencoded({extended: true})); 

app.use('/',idx); 

app.use('/reg_path',ra); 

app.listen(app.get('port'),function(){ 
    console.log('Express started press asdfadsfasdfasdf'); 
    }); 

私のindex.js

var express = require('express'); 
var fs = require('fs'); 

var router = express.Router(); 

router.get('/',function(req,res,next){ 
    //res.sendHeader(.) 
    res.render('index.ejs',{}); 
    //res.render('title.ejs',{}); 
    }); 

module.exports = router; 

私index.ejs

<!DOCTYPE html> 
<html> 
    <head> 
    </head> 
    </body> 
    <div id="reg_path"> 
     <p>Enter the Regressions Folder Path</p> 
     <form action="/reg_path" method="post" enctype="multipart/form-data"> 
    <fieldset> 
     <label for="path">Path:</label> 
     <input type="text" id="path" name="path" placeholder="Enter the  Absolute path"/> 
     <input type="submit" value="Enter"/> 
    </fieldset> 
     </form> 
    </div> 
    </body> 
</html> 

私ra.jsから、今

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

var app = express.Router(); 
var path; 
app.use(bodyParser.urlencoded({extended:true})); 
app.use(bodyParser.json()); 

app.post("/",function(req,res){ 
    console.log(req.body.path); 
    path = req.body.path; 
    fs.access('path',fs.constants.F_OK, (err) => { 
     if (err) throw err; 
     res.redirect('./index'); 
     //if (err) { 
     // res.writeHead(404,{'Content-Type':'text/plain'}); 
     // return res.end('The specified path "' + path + '" does not  exists'); 
     //} 
    }); 
    //fs.access('path',fs.constants.R_OK, (err) => { 
    // //if (err) { 
    // // res.writeHead(404,{'Content-Type':'text/plain'}); 
    // // return res.end('The specified path "' + path + '" has no READ  permissions'); 
    // //} 
    //}); 
}); 



module.exports = app; 

ですインデックスページ、パスiを入力するとnフォームを選択し、submit.logをconsole.logに入力すると、 'req.body'が 'undefined'として返されます。

「req.body」の値が最初に使用できないため、ra.jsのコードのほとんどはコメントまたは更新されていません。私はそれを最初に修正する必要があります。

私はインターネットを通じて検索し、自分のコードにある間違いを見つけましたが、私はそれを明らかにすることができません。 v6.11.0

ボディパーサー:1.17.2 エクスプレス:4.15.3 EJS:2.5.6

+0

server.jsが見つかりません。app.use(bodyParser.json());そのファイルが何であれ、ボディパーサra.jsは必要ありません^ _ ^。 ExpressJSを初めてお使いになる場合は、このテンプレートhttps://www.npmjs.com/package/express-generator-dgを使用し、そこから取得することをお勧めします。すべてのコード行が説明されています。 –

答えて

2

フォームはエンコードされenctype="multipart/form-data"を使用する任意のヘルプははるかに

ノードバージョンを理解されたいですbody-parserには対応していません。

このタイプを使用する必要がある場合(フォームからファイルをアップロードする場合など)は、multerをご覧ください。

この場合は、enctype属性を省略すると、フォームのデフォルトはapplication/x-www-form-urlencodedになります。

+0

ありがとうございます。私はenctype属性を削除して、私の問題を解決しました。フォームには1つのエントリ(入力)のみが含まれているため、enctype属性は必須ではありません。 – Ajatasatru