2016-09-02 87 views
1

所以我正在審查和實踐使節點貓鼬休息api和表達。我遇到了問題,因爲我收到一個錯誤,我不知道如何解決。我很確定如何執行put和delete部分。但是,如果有人能夠顯示那將是什麼樣子。這將會非常棒。restapi使用mongoose和node.js發佈,放置和刪除

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

什麼是你在'POST'調用'req.body'得到些什麼? – 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-寧靜-API的使用節點和快車-4使用-gruntjs-IN-A-均值堆疊applicationauthenticate-A-節點-API與 - 令牌。 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

要提交後/ PUT /刪除要求它會更好地使用身體分析器中間件。

例如從數據庫中刪除任何數據(例如pokemon),您可以按照此方法進行操作。

包括/需要必要的庫/模塊。

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()); 
    }) 
}); 
相關問題