2016-06-30 9 views
1

小さなexpressアプリを作成しました。私はちょうどpostメソッドをテストしようとしています。しかし、それはまったく機能しません。私によれば、すべてが大丈夫です。しかし、私は問題を理解することはできません。誰でも私をここで助けてください? `express` app - ` postman`を使って `post`リクエストをテストすることができません

私server.jsファイル:

var express = require('express'); 
var bodyParser = require('body-parser'); 
var Post = require('./models/post'); 

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

app.use(bodyParser.json()); 

app.get('/api/posts', function(req, res) { 
    res.json([ 
     { 
      username:"dickeyxxx", 
      body : "node rocksxx" 
     } 
    ]) 
}); 


app.post('/api/posts', function(req, res, next) { 

    var post = new Post({ 
     username:req.body.username, 
     body:req.body.body 
    }) 

    post.save(function(err, post){ 
     if(err) { return next } 
      res.json(201,post); 
    }) 

}) 



app.listen(5000, function(){ 
    console.log('Server Listening on', 5000); 
}) 

私post.js:

var db = require('../db'); 
var Post = db.model('Post', { 
    username:{type:String, required:true}, 
    body:{type:String,required:true}, 
    date:{type:Date, required:true,default:Date.now} 
}); 

module.exports = Post; 

私db.js:郵便配達と

var mongoose = require('mongoose'); 
mongoose.connect('mongodb://localhost/social', function(){ 
    console.log('mongoose connected'); //i am getting consoled 
}); 

module.exports = mongoose; 

私の挑戦:

postman screen shot

ここでお手伝いしますか?

+0

を参照してくださいでしょうか? – Subburaj

+0

app.postルートハンドラに到達したかどうかを確認するためにconsole.logを追加しようとしましたか? – Molda

+0

@Subburaj - これは保存されていないと思います。 (私はmongoシェルを使用して見てみました)しかし、私は結果が表示されません – 3gwebtrain

答えて

2

res.json(201,post);が間違っています。あなたは、ステータス201を送信する場合は

その後、

res.status(201).json(post); 

は、文書がMongoDBの中に保存されているかどうかhttp://expressjs.com/en/api.html#res.json

2

このようなエラーは、通常、Postmanが実際にクライアントに到達できない場合です。それは典型的なエラーではなく、表現の復帰です。

はあなたの特急アプリを起動すると、あなたが実際に

Server Listening on 5000

もしそうなら、GETエンドポイントの作業を行うを見ていますか?

上記の場合、通常の方法では、このようなエラーを表示する典型的な方法は、キャッチされていない例外のためにあなたのexpressアプリケーションが実際に終了することです。郵便配達要求を送信したときにコンソールにエラーが表示されますか?

これらのチェックの後で、console.log('POST endpoint called')をPOSTエンドポイントに追加し、実際に呼び出されていることを確認します。

POSTエンドポイントにも問題があります。

post.save(function(err, post){ 
    if(err) { return next(err) } // You need to actually return the called next function, not the function itself. 
    return res.json(201,post); // It is commonplace to return the res here to avoid hitting any further code that you might add later. 
}) 

そして(多分簡潔にするために)そのないあなたのコード例の中では、あなたが常に応答を返すように、任意のエラーや404年代を拾ういくつかの最後のエンドポイントを持っていることを確認してください。

app.all('*', function (req, res, next) { 
    return res.status(404).json({success: false, message: 'Route \'' + req.url + '\' is invalid.'}); 
}); 
app.use(function(err, req, res, next) { 
    return res.status(500).json(err); 
}); 
+0

私の 'data \ db'の横にあるすべてのファイルを削除すると何度か働いているようです。それは、それぞれの要求を私はそのフォルダをクリアする必要があることを意味ですか、またはここで何が間違っていますか? – 3gwebtrain

+0

その場合、アイテムがすでに存在しているか類似しているので、mongoからエラーが発生している可能性が高く、エラーを返します。あなたが実際に 'next'を呼んでいるわけではないので、expressは決して結果を返さずハングするので、郵便配達人は決して実際にデータを取得しません。上記のエラーエンドポイントと 'next(err)'を追加すると、エラーが表示されます。 –

+0

そして、あなたが正しいステータスコードを返すことを望むなら、あなたのjson呼び出しを更新する必要がありますが、あなたがそうした機会に応答しているかのように表示されているとします。 –

関連する問題