【发布时间】:2021-06-05 18:22:52
【问题描述】:
我正在使用 MongoDB 通过node 和mongoose 为我的应用程序提供数据。我为model 创建了一个名为ReportSchema 的架构,然后我导入model 以将其用作Report 用于像Report.find() 这样的服务器请求。我还通过名为reports 的数据库在MongoDB 中创建了一些数据,并且在MongoDB 中一切正常。但是我得到一个空数组而不是我创建的数据。我查看了其他 SO 答案,但没有一个有效,例如更改集合名称、复数等。
我通过 docker 容器即服务来完成所有这些工作。
我不知道我是否遗漏了 docker、mongoose 或 node 中的某些内容。请问,谁能给我一些指导?
谢谢!
MongoDB 外壳
use reports
db.reports.insert({
stepName: 'Step one',
stepType: 'Milestone',
description: 'Some phase to complete.',
addToReport: false,
date: new Date(),
});
Mongoose 架构
import { Schema, Document, model } from 'mongoose';
export interface Report extends Document {
stepName: string;
stepType: string;
description: string;
addToReport: boolean;
date: Date;
}
export const ReportSchema = new Schema(
{
stepName: String,
stepType: String,
description: String,
addToReport: Boolean,
date: { type: Date, default: Date.now },
},
{
timestamps: true,
}
);
export default model<Report>('report', ReportSchema, 'reports');
节点
import express, { Express, Request, Response } from 'express';
import cors from 'cors';
import bodyParser from 'body-parser';
import mongoose from 'mongoose';
import Report from '../db/models';
import connection from './connection';
const app: Express = express();
const PORT: string | number = process.env.PORT || 7004;
const DB_NAME: string = 'reports';
const DB_URI: string = `mongodb://root:password@mongodb-service:27017/${DB_NAME}?authSource=admin`;
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
// GET reports
app.get('/reports', async (req: Request, res: Response) => {
try {
const reports = await Report.find(); // --> this returns empty array, even though data exist.
res.status(200).json({ reports });
} catch (error) {
res.json({ error, errormessage: 'Error fetching reports!' });
}
});
app.use(cors());
const connection = async (app: Express): Promise<void> => {
try {
await mongoose.connect(DB_URI, {
useNewUrlParser: true,
useUnifiedTopology: true,
});
await app.listen(PORT, () => {
console.log(`Reporrs app running on port ${PORT}.`);
});
} catch (error) {
throw new Error('DB_CONN_ERROR:::' + error);
}
};
// connection to mongo with mongoose
connection(app);
Dockerfile
FROM node:12
COPY . /opt/app
WORKDIR /opt/app
RUN yarn
CMD yarn watch
Docker-compose
version: '3'
services:
reports-service:
build: './reports-service'
ports:
- 7004:7004
volumes:
- ./reports-service:/opt/app
mongodb:
image: mongo:latest
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=password
ports:
- 27017:27017
volumes:
- mongodb_data_container:/data/db
volumes:
mongodb_data_container:
【问题讨论】:
标签: node.js mongodb typescript docker mongoose