2016-11-11 6 views
-2

JavaScript関数と引数を検索しましたが、以下のような関数を理解するのに役立つものは見つかりませんでした。 original tutorialを参照できます。これら3つのJavaScript関数引数はどのように使用されますか?

createPuppyには、req、res、およびnextという3つの引数があります。

function createPuppy(req, res, next) { 
    req.body.age = parseInt(req.body.age); 
    db.none('insert into pups(name, breed, age, sex)' + 
     'values(${name}, ${breed}, ${age}, ${sex})', 
    req.body) 
    .then(function() { 
     res.status(200) 
     .json({ 
      status: 'success', 
      message: 'Inserted one puppy' 
     }); 
    }) 
    .catch(function (err) { 
     return next(err); 
    }); 
} 

この関数は、ルータによって呼び出されている:

var express = require('express'); 
var router = express.Router(); 

var db = require('../queries'); 

router.get('/api/puppies', db.getAllPuppies); 
router.get('/api/puppies/:id', db.getSinglePuppy); 
router.post('/api/puppies', db.createPuppy); 
router.put('/api/puppies/:id', db.updatePuppy); 
router.delete('/api/puppies/:id', db.removePuppy); 
module.exports = router; 

db.createPuppyが呼び出されると、渡された引数はありませんでした。

この3つの引数は、どのようにしてこの関数に適合しますか?

アップデート:私はNode、JavaScript、pg-promise、expressを初めて使っています。それで、どこを掘るのかを圧倒するのは圧倒的でした。私はどこに焦点を絞るためにここでリードを得るために来た。ありがとう!

+1

ここでExpressを読んでください:http://expressjs.com/en/guide/routing.html – jmargolisvt

+0

関数が*呼び出されたときは、任意の数の引数を渡すことができます。あなたが上でやっていることは、関数を引数として別の関数に渡すことです。後でそれを引数の数で呼び出します。 –

+0

フィードバックいただきありがとうございます。あなたのコメントは、[JavaScriptコールバック関数](http://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/)を最初に理解しようとしました。私は明らかに理解していませんでした。あなたが指摘したエクスプレスルーティングページを横断しました。コールバックを理解していないと、明示ソースは明瞭さを増すのに役立たなかった。今それはもう少し明確です。 –

答えて

-1

私は(req, res, next)がExpressのデフォルト引数であると信じています。

router.post('/api/puppies', db.createPuppy);と書くと、関数createPuppyは実際にはまだ呼び出されていません。これは、そのメソッド/エンドポイントがヒットしたときに呼び出す関数を設定します。

Expressは、POSTで/api/puppiesエンドポイントにヒットしたときに、関数を呼び出して必要な引数を渡します。

希望に役立ちます!

+1

あなたはreq、res、および次のデフォルト引数を明示的に使用していました。 Eric KambestadはAPIを表現するためのリンクを与えました。適切な分野への私の学習を狭めるのを助けてくれてありがとう。 –

-1

そのデータをPOST要求によってそのエンドポイントに送信します。その後、渡したデータにreq.body変数でアクセスすることができます。

また、リクエスト本体にアクセスするには、bodyParserミドルウェアが必要です。 http://expressjs.com/en/api.html#req.body

+0

エクスプレスAPIへのポインタは、それらの(req、res、next)関数/オブジェクトが詳細に示されていることを示すのに非常に役立ちました。そのページ全体を確認しています。私がこれを落とすと、bodyParserも見ていきます。ありがとうございました。 –

関連する問題