MongoDB是否不通过邮递员发送回复?

时间:2020-09-25 20:14:03

标签: node.js mongodb api express mongoose

哦,这个API项目真是一个巨大的痛苦。我昨天所有这些端点都工作了,但是当我开始试图将数据添加到数据库中的集合(通过Mongo shell)时,突然我的请求挂断了。这是我的服务器:

var express = require('express'),
app = express(),
port = process.env.PORT || 3000;
mongoose = require('mongoose'),
Character = require('./api/models/characterListModels'),
bodyParser = require('body-parser');

mongoose.Promise = global.Promise;
mongoose.connect({ useNewUrlParser: true }, 'mongodb://127.0.0.1:27017/streetfighterdb');


app.use(bodyParser.urlencoded({ extended: true}));
app.use(bodyParser.json());

var routes = require('./api/routes/characterListRoutes')
routes(app);

app.listen(port);

console.log('Street Fighter RESTful API server started on: ' + port);

这是我的控制人

        'use strict';
    
    var mongoose = require('mongoose'),
    Character = mongoose.model('Characters')
    
    exports.list_all_characters = function (req, res) {
        Character.find({}, function (error, character) {
            if (error) {
                res.send(error);
            } else {
            res.json(character)
            }
        })
    }
    
    exports.create_a_character = function (req, res) {
        var new_character = new Character(req.body);
        new_character.save(function (error, character) {
            if (error) {
                res.send(error);
            }
            res.json(character);
        });
    }

exports.get_a_character = function (req, res) {
    Character.findById(req.params.characterId, function (error, character) {
        if (error) {
            res.send(error);
        }
        res.json(character);
    });
}

exports.update_a_character = function (req, res) {
    Character.findByIdAndUpdate({
        _id: req.params.characterId
    }, req.body, {
        new: true
    }, function (error, character) {
        if (error) {
            res.send(error);
        }
        res.json(character);
    });
}

exports.delete_a_character = function (req, res) {
    Character.deleteOne({
        _id: req.params.characterId
    }, function (error, character) {
        if (error) {
            res.send(error);
        }
        if (!error) {
            res.json('Character Successfully Deleted');
        }
    })
}

这是我的路由器

'use strict';

module.exports = function(app) {
var characterList = require('../controllers/characterListController');

app.route('/characters')
.get(characterList.list_all_characters)
.post(characterList.create_a_character);

app.route('/characters/:characterId')
.get(characterList.get_a_character)
.put(characterList.update_a_character)
.delete(characterList.delete_a_character);
};

这是我的模特

'use strict';
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var characterSchema = new Schema({
    name: {
        type: String,
        required: true,
    }
})

module.exports = mongoose.model('Characters', characterSchema);

现在我尝试了一些事情。

  1. 删除了特定的响应,仅添加了一个通用的res.send('success')即可。

  2. 我还用{}替换了Character.find()方法中的[],并且它起作用了(响应一个空对象)。但是由于某种原因,其他端点都没有返回响应。

  3. 添加了console.log(res)console.log(req),并在控制台中获取了日志。

这是怎么回事?帮助!

2 个答案:

答案 0 :(得分:1)

猫鼬offical docs引用

mongoose.connect('mongodb://username:password@host:port/database?options...', {useNewUrlParser: true});

您将选项作为第一个参数传递,请替换为官方文档示例。

答案 1 :(得分:0)

好的,这很荒谬,但是事实证明,传递{useNewUrlParser:true}破坏了它。