TypeError: Organizations.find no es una función en C:\Users\dillo\Desktop\UWI\ECNG 3020 Final Year Project\Damage_Assessment _Tool\routers\OrganizationsRouters.js:11:23
Parece que no puedo captar lo que está mal. Estoy separando mis rutas en diferentes archivos para simplificar, pero sigo encontrándome con este error "TypeError: Organisations.find is not a function"
El archivo de ruta contiene la ruta que se necesita: OrganizacionesRouter.js
const express = require('express') const router = new express.Router(); const { mongoose } = require ('../db/mongoose'); const Organizations = require('../db/models/Organizations.model') //Routes for Organizations router.get('/Organizations', (req,res) => { //return an array of all the damage assessments made that is stored on the database. Organizations.find({}).then((organization) => { res.send(organization); }).catch((e) => { res.send(e); }); }) router.post('/Organizations', (req,res) => { //create a damage assessment report and save to the database let organizationName = req.body.organizationName; let newOrganization = new Organizations({ organizationName }); newOrganization.save().then((OrganizationDoc) => { //the full Organization document is returned (including id) res.send(OrganizationDoc); }) }); router.patch('/Organizations/:id', (req,res) => { //update the Organization specified Organizations.findOneAndUpdate({_id: req.params.id},{ $set: req.body }).then(() => { res.send({'message' : "Updated Successfully"}); }); }); router.delete('/Organizations/:id', (req,res) => { //delete the Organization specified Organizations.findOneAndRemove({ _id: req.params.id }).then((removeOrganizationDoc) => { res.send(removeOrganizationDoc); }) }); module.exports = routerApp.js es el archivo de índice principal: App.js
const express = require('express'); const app = express(); const { mongoose } = require ('./db/mongoose'); const bodyParser = require ('body-parser'); const res = require('express/lib/response'); /*Load Middleware*/ app.use(bodyParser.json()); //Import Routers const organizationRouter = require('./routers/OrganizationsRouters') //Register Router app.use(organizationRouter) //Listening to the server on port 3000 app.listen(3000,()=>{ console.log("Listening to port 3000"); })Organizaciones.model.js es el esquema de mangosta: Organizaciones.model.js
const mongoose = require('mongoose'); const OrganizationsSchema = new mongoose.Schema({ organizationName:{ type: String, required: true, minlength:1, trim: true } }) const Organizations = mongoose.model( 'Organizations', OrganizationsSchema); module.exports = {Organizations}Supongo que hay un problema en estas dos líneas.
const { mongoose } = require ('../db/mongoose'); const Organizations = require('../db/models/Organizations.model')Debería haber una llamada mongoose.createConnection en algún momento, así como connection.model('Organizations', '../db/models/Organizations.model') Y luego
router.get('/Organizations', (req,res) => { Organizations.find( {"name": "blah"}, (err, docs) => { if(err) { res.send(err) } else { res.send(docs) } } ) })Voy a ejecutar mi depuración en forma escrita.
TypeError: Organizations.find is not a function
Entonces, ¿qué son las Organizaciones...
const Organizations = require('../db/models/Organizations.model')
está etiquetado como un modelo... ¿necesitas crear una instancia de él? ¿O usar una herramienta ORM para buscar en lugar de llamar a buscar en un modelo? Que es Organizaciones.
const Organizations = mongoose.model( 'Organizations', OrganizationsSchema);
... ok, tenemos mangosta... no lo he usado antes, asumiendo que es un orm o algún paquete en lugar de una función... es... entonces, ¿necesitamos/tenemos una conexión con él? Creo que no, así que tal vez necesitemos crear una conexión.
https://mongoosejs.com/docs/connections.html
así que algo como esto con sus datos.
mongoose.connect('mongodb://localhost:27017/myapp');
Intente cambiar la importación del modelo en OrganizationsRouter.js a:
const { Organizations } = require('../db/models/Organizations.model')