哦,这个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);
现在我尝试了一些事情。
删除了特定的响应,仅添加了一个通用的res.send('success')
即可。
我还用{}
替换了Character.find()
方法中的[]
,并且它起作用了(响应一个空对象)。但是由于某种原因,其他端点都没有返回响应。
添加了console.log(res)
和console.log(req)
,并在控制台中获取了日志。
这是怎么回事?帮助!
答案 0 :(得分:1)
猫鼬offical docs引用
mongoose.connect('mongodb://username:password@host:port/database?options...', {useNewUrlParser: true});
您将选项作为第一个参数传递,请替换为官方文档示例。
答案 1 :(得分:0)
好的,这很荒谬,但是事实证明,传递{useNewUrlParser:true}破坏了它。