繁体   English   中英

restapi在post,put和delete上使用mongoose和node.js

[英]restapi using mongoose and node.js on post,put, and delete

所以我正在审查并练习使用节点mongoose和express来制作rest api。 我在制作api的帖子部分时遇到问题,因为我收到一个错误,我不确定如何修复。 我有点确定怎么做put和delete部分。 但如果有人能够展示出什么样子。 这将会非常棒。

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)

我一直在努力修复但不确定如何。

为此使用邮递员 在此输入图像描述

req.body

包含请求正文中提交的键值对数据。 默认情况下,它是未定义的,并且在使用正文解析器和multer等正文解析中间件时会填充。

以下示例显示如何使用正文解析中间件来填充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

//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'});
    });


})

要提交发布/发送/删除请求,最好使用正文解析器中间件。

例如,您可以按照此方法从数据库中删除任何数据(例如,口袋妖怪)。

包括/需要必要的库/模块。

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());
     }) 
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM