【问题标题】:MongoDB Not Sending Responses Through Postman?MongoDB 不通过 Postman 发送响应?
【发布时间】:2021-01-12 04:25:13
【问题描述】:

天啊,这个 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) 并在控制台中获取了日志。

这里发生了什么?救命!!

【问题讨论】:

    标签: node.js mongodb api express mongoose


    【解决方案1】:

    被猫鼬引用offical docs

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2023-03-16
        • 2021-02-19
        • 1970-01-01
        • 2017-12-17
        • 2015-10-24
        • 1970-01-01
        • 1970-01-01
        • 2016-12-14
        • 2017-01-22
        相关资源
        最近更新 更多