现有数据库中的 Mongoose 节点 API 未返回结果且未显示错误

Posted

技术标签:

【中文标题】现有数据库中的 Mongoose 节点 API 未返回结果且未显示错误【英文标题】:Mongoose Node API in an existing DB not returning results and shows no errors 【发布时间】:2020-01-07 20:08:51 【问题描述】:

我是基于 nodeJS 的 API 的新手,我想连接到 MongoDB 数据库中已经存在的集合。 如果我尝试访问 http://localhost:8080/teams,我会在浏览器上收到错误消息:无法获取 /Teams。 甚至 console.log 都没有打印出来,但 nodemon(我用来在每次保存后加载)显示没有错误。

这是现有记录的示例:

use MYDB
db.TeamsCol.find()
 "_id" : ObjectId("5d702df59ba60607dad06df4"), "teamID" : 1, "teamName" : "PT", "datetime" : "04-09-2019 10:21:16 Wednesday" 
 "_id" : ObjectId("5d702ed59ba60607dad06df5"), "teamID" : 2, "teamName" : "ES", "datetime" : "01-09-2019 11:20:00 Sunday" 

我构建了以下结构:

project folder: API

API/server.js 
API/models/teamModel.js
API/Routes/teamRouter.js

如下所述:

API/server.js 文件:

// Import express
let express = require('express');
// Import Body parser
let bodyParser = require('body-parser');
// Import Mongoose
let mongoose = require('mongoose');

// Initialise the app
let app = express();

// Setup server port
var port = process.env.PORT || 8080;

// Import routes
let apiRouter = require("./Routes/teamRouter");

// Connecting to the database
const db = mongoose.connect('mongodb://localhost/MYDB', useNewUrlParser: true);

// setting body parser middleware 
app.use(bodyParser.json());
app.use(bodyParser.urlencoded( extended: true ));

// API routes
app.use('/Teams', apiRouter);

// Running the server
app.listen(port, () => 
console.log(`http://localhost:$port`)
)

API/models/teamModel.js 文件:

// Import Mongoose
let mongoose = require('mongoose');

const Schema = mongoose.Schema;
const teamModel = new Schema(
    teamID:  type: Number   ,
    teamName:  type: String ,
    datetime:  type: String ,
)

module.exports = mongoose.model('teamsModel', teamModel, 'TeamsCol');

API/Routes/teamRouter.js 文件:

// Import express
let express = require('express');
// Import Teams controller
var Team = require('../models/teamModel');

const teamRouter = express.Router();

teamRouter.route('/teams')
.get((req, res) => 
    Console.log(req)
    Team.find(, (err, teams) => 
        res.json(teams)
    )  
)

// Middleware 
teamRouter.use('/:team', (req, res, next)=>
Team.findById( req.params.team, (err,team)=>
    if(err)
        res.status(500).send(err)
    else 
        req.team = team;
        next()
    
)

)
teamRouter.route('/:team')
.get((req, res) => 
    res.json(req.team)
) // end get Teams/:team 

// Export API routes
module.exports = teamRouter;

这是我正在使用的版本

mongo --version
MongoDB shell version v3.6.3

node --version
v8.9.4

还有 package.json 的内容:


"name": "teamsapi",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": 
"test": "echo \"Error: no test specified\" && exit 1"
,
"author": "",
"license": "ISC",
"dependencies": 
"body-parser": "^1.19.0",
"express": "^4.17.1",
"mongoose": "^5.6.12"


有什么想法吗?

【问题讨论】:

【参考方案1】:

因为在您的server.js 文件中,您已经使用了:

app.use('/Teams', apiRouter);

所以api/teams不存在,应该是/Teams/teams。完整的网址将是http://localhost:8080/Teams/teams

【讨论】:

以上是关于现有数据库中的 Mongoose 节点 API 未返回结果且未显示错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Mongoose (mongodb node.js) 中,如何更新现有值并插入缺失值,而不删除未指定的值?

mongodb 在节点中使用 mongoose 想要在查询中使用 or 和

如果没有,请检查现有数据然后创建 mongodb 和 mongoose

Angular 2 + NodeJS + Mongoose - 从 Angular 2 发布数据到 rest api nodejs 后端。节点 api 日志:选项 /url,POST 标头不起作用

如果未找到 ID,则 Mongoose 更新文档或插入新文档(Express REST API)

如果未找到 ID,则 Mongoose 更新文档或插入新文档(Express REST API)