【发布时间】:2021-10-21 13:33:24
【问题描述】:
我在teamMembers.js中有以下型号:
const { Schema, model } = require('mongoose');
const teamMembersSchema = new Schema({
uid: String,
name: String,
hours: Number
})
const TeamMembers = model('teamMembers', TeamMembersSchema);
module.exports = TeamMembers;
我在teamMemberRoute.js 中创建了以下端点:
const TeamMembers = require('./models/teamMembers');
module.exports = (app) => {
app.get('/api/pods/teamMembers/:uid', async (req, res) => {
let teamMember = await TeamMembers.find( {'uid': req.params.uid } );
return res.status(200).send(teamMember);
});
app.get('/api/pods/teamMembers', async (req, res) => {
let teamMembers = await TeamMembers.find();
return res.status(200).send(teamMembers);
});
}
第一个端点 (/api/pods/teamMembers/:uid) 工作正常 - 当我传递 uid 时,它会返回特定于 TeamMember 集合中 uid 的文档。
第二个端点应该返回 TeamMember 集合中的所有文档,因为没有传递任何参数。但是,执行请求时,只返回[]。我们知道 TeamMember 集合中存在文档这一事实,因为第一个端点根据传递的 uid 参数从该集合返回数据。
我对此感到困惑。有任何想法吗?我认为我的模型没有任何问题,因为我能够毫无问题地执行第一个端点。
【问题讨论】:
-
.find({})也不起作用。我知道.find()有效,因为我已经将它用于另一个返回所有文档的集合。但由于某种原因,它不适用于这个 TeamMember 集合。 -
是的,我试过了。它不起作用。
-
app是什么?在正常情况下,Express 不会对路由回调的返回值做任何事情,所以如果你的异步函数的承诺被拒绝,它不会对拒绝做任何事情(尽管 Node.js 通常会显示它)。但是,如果您使用的是 Koa 或其他东西……您确定您没有收到拒绝的承诺吗? -
app是 Express 的变量。它在我的server.js中初始化为const app = express();。我不认为我得到了拒绝的承诺。我没有看到任何被退回的东西。我还尝试在第二个异步函数的第一行添加console.log('test'),但在执行请求时什至没有打印出来。 -
不管是不是问题,这些处理程序都是不正确的。您需要在处理程序中处理拒绝任何承诺,Express 不会为您做这件事。 (这基本上是将处理程序代码包装在
try/catch中并从catch块发送错误响应。最好将其包装在实用程序函数中。)
标签: javascript node.js mongodb api mongoose