2017-06-14 3 views
0

私はすべての同様の質問を見てきましたが、誰も私のために働いていません。私は、body-parserを使ってフォームから入力テキストを印刷することができないノードjsアプリケーションを持っています。ノードjs post - 未定義のプロパティを読み取ることができませんか?

マイindex.ejs:

  <form id="demo-2" method = "POST" action="/search"> 
<input type="search" name = "searcher" placeholder="Search"> 
        </form> 

Index.js:

var cool = require('cool-ascii-faces'); 
var express = require('express'); 

var app = express(); 
var pg = require('pg'); 
var bodyParser = require('body-parser'); 
var env = require('node-env-file'); 

app.set('port', (process.env.PORT || 5000)); 
app.use(express.static(__dirname + '/views/')); 

// views is directory for all template files 
app.set('views', __dirname + '/views'); 
app.set('view engine', 'ejs'); 

//app.use(express.bodyParser()); 


//DIFFERENT APPS - tells them what to do 

app.post('/search', function(request, response) { 
    //var username = req.body; 

    console.log("posted something"+ request.body.searcher); 
    response.end("something was posted: "+ request.body.searcher); 
}); 

app.get('/search', function(request, response) { 
    response.send("skylarr"); 

}); 

と入力の名前探索を使用したにも関わらず、私はエラーを取得する:TypeError: Cannot read property 'searcher' of undefined

ここで間違っていますか?

+1

あなたはコメントをボディパーサーミドルウェア。どうして?コメントしてから試してみてください。 – Khurram

+0

ミドルウェアに関するエラーが発生し、アプリケーションを実行できません。 – skyguy

答えて

1

body-parserは表現の一部ではありません。 npm install body-parser --saveを使用して個別にインストールし、ミドルウェアとして使用します。あなたがコメントした行の後のコードを確認してくださいexpress.bodyParser()ミドルウェア

var cool = require('cool-ascii-faces'); 
var express = require('express'); 

var app = express(); 
var pg = require('pg'); 
var bodyParser = require('body-parser'); 
var env = require('node-env-file'); 

app.set('port', (process.env.PORT || 5000)); 
app.use(express.static(__dirname + '/views/')); 

// views is directory for all template files 
app.set('views', __dirname + '/views'); 
app.set('view engine', 'ejs'); 

//app.use(express.bodyParser()); 

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 


//DIFFERENT APPS - tells them what to do 

app.post('/search', function(request, response) { 
    //var username = req.body; 

    console.log("posted something"+ request.body.searcher); 
    response.end("something was posted: "+ request.body.searcher); 
}); 

app.get('/search', function(request, response) { 
    response.send("skylarr"); 

}); 
+0

@skyguy上記のコメントで、ミドルウェアに関するエラーを生成する 'bodyParser'というコメントを解除したとします。私は 'bodyParser'が表現の一部ではないことを伝えたいと思います。別途インストールして使用してください。 – Khurram

+0

私は今理解しています。皆さん、ありがとうございました – skyguy

1

標準のNode.JS HTTP要求には、bodyプロパティはありません。そのキーは、bodyParserミドルウェアによって修正されています。

bodyParserミドルウェアを追加するか、何らかの理由で本文を解析しない場合は、クエリまたはURLパラメータを使用してsearcherを渡すことができます。

+0

申し訳ありませんが、私はこれが初めてです。これらの2つのオプションの例を挙げることはできますか? – skyguy

1

ボディパーサーがありません。ボディパーサーをミドルウェアとして使用するには、expressに指示する必要があります。

app.use(bodyParser.urlencoded({ extended: false })); 
app.use(bodyParser.json()); 

これらの2行をapp.post()の上に追加します。

関連する問題