2016-09-02 4 views
1

だから私はノードmongooseとexpressで休憩APIを作ることを見直して練習している。私は問題を解決する方法がわからないというエラーが出ているので、APIのポスト部分を作成しています。私はちょっと置くと削除の部分を行う方法を確かめている。しかし、誰かがそれがどのように見えるかを示すことができれば。それは素晴らしいでしょう。post、put、deleteにmongooseとnode.jsを使ってrestapiを書く

mongoose.connect('mongodb://localhost:27017/pokemon'); 

var pokemonSchema = { 
    pokeid: Number, 
    name:String, 
    type:String, 
    weight:String, 
    height: String, 
    date: { type: Date, default: Date.now }, 
    summary: String 

} 

var Pokemon = mongoose.model('Pokemon', pokemonSchema); 

var app = express(); 
app.use(cors()); 

app.get('/api', function(req, res) { 
    res.json({ message: 'hooray! welcome to our api!' }); 
}); 

//gets the all the pokemon 
app.get('/pokemon', function(req, res) { 
    Pokemon.find(function(err, doc) { 
     res.send(doc); 
    }); 
}); 

//gets a specific pokemon 
app.get('/pokemon/:id', function(req, res) { 
    Pokemon.findOne({ _id: req.params.id},function (err, doc) { 
     res.send(doc); 
    }) 
}) 


//create a new pokemon 
app.post('/pokemon', function(req, res) { 

    var pokemon = new Pokemon(); 

    pokemon.pokeid = req.body.pokeid; 
    pokemon.name = req.body.name; 
    pokemon.type = req.body.type; 
    pokemon.weight = req.body.weight; 
    pokemon.height = req.body.height; 
    pokemon.summary = req.body.summary; 

    //save pokemon 
    pokemon.save(function(err) { 
     if (err) 
      res.send(err); 
     res.json({ message: 'pokemon created'}); 
    }); 


}) 

//update the pokemon 

app.put('/pokemon/:id', function(req, res) { 


}) 

app.delete('/pokemon/:id', function(req, res) { 

}); 

エラー

TypeError: Cannot read property 'pokeid' of undefined 
<br> &nbsp; &nbsp;at /home/g62/pokemonsite/server/server.js:54:30 
<br> &nbsp; &nbsp;at Layer.handle [as handle_request] (/home/g62/pokemonsite/server/node_modules/express/lib/router/layer.js:95:5) 
<br> &nbsp; &nbsp;at next (/home/g62/pokemonsite/server/node_modules/express/lib/router/route.js:131:13) 
<br> &nbsp; &nbsp;at Route.dispatch (/home/g62/pokemonsite/server/node_modules/express/lib/router/route.js:112:3) 
<br> &nbsp; &nbsp;at Layer.handle [as handle_request] (/home/g62/pokemonsite/server/node_modules/express/lib/router/layer.js:95:5) 
<br> &nbsp; &nbsp;at /home/g62/pokemonsite/server/node_modules/express/lib/router/index.js:277:22 
<br> &nbsp; &nbsp;at Function.process_params (/home/g62/pokemonsite/server/node_modules/express/lib/router/index.js:330:12) 
<br> &nbsp; &nbsp;at next (/home/g62/pokemonsite/server/node_modules/express/lib/router/index.js:271:10) 
<br> &nbsp; &nbsp;at cors (/home/g62/pokemonsite/server/node_modules/cors/lib/index.js:179:7) 
<br> &nbsp; &nbsp;at /home/g62/pokemonsite/server/node_modules/cors/lib/index.js:229:17 
<br> &nbsp; &nbsp;at originCallback (/home/g62/pokemonsite/server/node_modules/cors/lib/index.js:218:15) 
<br> &nbsp; &nbsp;at /home/g62/pokemonsite/server/node_modules/cors/lib/index.js:223:13 
<br> &nbsp; &nbsp;at optionsCallback (/home/g62/pokemonsite/server/node_modules/cors/lib/index.js:204:9) 
<br> &nbsp; &nbsp;at corsMiddleware (/home/g62/pokemonsite/server/node_modules/cors/lib/index.js:209:7) 
<br> &nbsp; &nbsp;at Layer.handle [as handle_request] (/home/g62/pokemonsite/server/node_modules/express/lib/router/layer.js:95:5) 
<br> &nbsp; &nbsp;at trim_prefix (/home/g62/pokemonsite/server/node_modules/express/lib/router/index.js:312:13) 

私はそれを修正しようとしているが、方法がわからないされています。この enter image description here

+1

? – abdulbarik

+0

私はこのチュートリアルに従っています。https://scotch.io/tutorials/build-a-restful-api-using-node-and-express-4#want-more-meansetting-up-a-mean-stack-single -page-applicationbuild-a-restful-api-using-node-and-express-4using-means-a-mean-stack-applicationは、トークン付きのノードを認証します。 req.bodyはスキーマと一致するはずです。 – user3296193

+0

コンソールを追加し、 'req.body'の値を確認してください。 '/ pokemon'にどうやってリクエストしていますか? – Shrabanee

答えて

0

req.body

Contains key-value pairs of data submitted in the request body. By default, it is undefined, and is populated when you use body-parsing middleware such as body-parser and multer.

The following example shows how to use body-parsing middleware to populate req.body.

var app = require('express')(); 
var bodyParser = require('body-parser'); 
var multer = require('multer'); // v1.0.5 
var upload = multer(); // for parsing multipart/form-data 

app.use(bodyParser.json()); // for parsing application/json 
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded 

app.post('/profile', upload.array(), function (req, res, next) { 
    console.log(req.body); 
    res.json(req.body); 
}); 

のための郵便配達を使用して

リンクお読みください:入れ/削除/ポストを送信するにはhttp://expressjs.com/en/api.html#req.body

0
//create a new pokemon 
app.post('/pokemon', function(req, res) { 

    var pokemon = new Pokemon({ 

    pokeid = req.body.pokeid; 
    name = req.body.name; 
    type = req.body.type; 
    weight = req.body.weight; 
    height = req.body.height; 
    summary = req.body.summary; 

}); 


    //save pokemon 
    pokemon.save(function(err) { 
     if (err) 
      res.send(err); 
     res.json({ message: 'pokemon created'}); 
    }); 


}) 
0

をそれを要求するボディパーサーミドルウェアを使用する方がよいでしょう。

たとえば、この方法に従うことができるデータベースからデータ(ポケモンなど)を削除します。

必要なライブラリ/モジュールを含む/必要とします。あなたが `POST`呼び出しで` req.body`になっている何

var express = require('express'); 
var bodyParser = require('body-parser'); 
var router = express.Router(); 
var urlencode = bodyParser.urlencoded({extended: false}); 

今APIの削除要求を作成...

router.delete('/pokemon/:id', urlencode, function(req, res, next){ 
    new Videos({id: req.body.id}).destroy().then(function(result){ 
     res.json(result.toJSON()); 
    }) 
}); 
関連する問題