在填充模型期间出现错误架构尚未为模型“任务”注册。\n使用 mongoose.model(name, schema)

Aji*_*han 1 mongodb node.js express

我正在做一个 Nodejs API,我正在 SUBTASK 中填充任务,但是我收到错误 Schema 尚未为模型 \"Task\" 注册。\nUse mongoose.model(name, schema)。

任务模型.js

const mongoose = require('mongoose');

const TaskSchema = new mongoose.Schema(
    {
        taskName: {
            type: String,
            unique: [true, 'Cannot be same type of task.'],
            maxlength: [30, 'Task name should not be more than 30 characters'],
            required: true
        },
        adminId: String,
        image_url: String,
        taskImage: {
            type: String
        },
        createdAT: {
            type:Date,
            default: Date.now
        }
    }
);


module.exports = Task = mongoose.model('Task', TaskSchema);
Run Code Online (Sandbox Code Playgroud)

子任务模型.js

const mongoose = require('mongoose')

const SubTaskSchema = new mongoose.Schema({
    subtask_name: {
        type: String,
        trim:true,
        required: [true, 'Please add a subtask title']
    },
    subtask_icon: {
        type: String
    },
    subtask_images: {
        type: String
    },

    slogan: {
        type: String
    },
    question: {
        type: String
    },
    createdID: {
        type: Date,
        default: Date.now
    },
    task: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Task'
    }
});

module.exports = mongoose.model('SubTask', SubTaskSchema);
Run Code Online (Sandbox Code Playgroud)

子任务路由.js

const SubTask = require('../../models/admin/SubTaskModel');
const express = require('express');
const router = express.Router();
const Task = require('../../models/admin/TaskModel');
const multer = require('multer');

const upload = require('./utils/sub_task_image')
// Get subtasks
// METHOD GET/

    router.get('/',  (req, res, next) => {

        SubTask.find({})
        .populate({
            path: "task"
        })
        .exec((err, subtasks) => {
            if(err) next(err);
            res.json({
                success: true,
                data: subtasks
            });
        })
    });
    module.exports = router;
Run Code Online (Sandbox Code Playgroud)

服务器.js

const express = require('express')
const dotenv = require('dotenv')
const connectDB = require('./config/db')
const colors = require('colors')
const morgan = require('morgan')
const cors = require('cors');




// use dotenv files
dotenv.config({
  path: './config/config.env'
});

connectDB();

const app = express();

// Dev logging middleware
app.use(morgan('dev'));
// Body parser
app.use(express.json());
// Body parser
app.use(express.json({
  extended: true
}));

// Cors
app.use(cors());


// ********* Routers admin ******//
app.use('/admin/task', require('./routes/Admin/tasks'));

// admin subtask
app.use('/admin/subtask', require('./routes/Admin/SubTaskRoutes'));


app.use('/uploads', express.static('uploads'));
app.use('/uploads/banner', express.static('uploads/banner'));


app.use((req, res, next) => {
  const error = new Error('Not found');
  error.status = 404;
  next(error);
});

app.use((error, req, res, next) => {
  res.status(error.status || 500);
  res.json({
    error: {
      status: error.status || 500,
      message: error.message
    }
  })
})

const PORT = process.env.PORT || 3030;
const server = app.listen(PORT,
  console.log(`Server running in ${process.env.NODE_ENV} mode on port ${PORT}`.yellow.bold)

);


// Handle unhandled promise rejections
process.on('unhandledRejection', (err, promise) => {
  console.log(`Error: ${err.message}`.red);
  // Close server & exit process
  server.close(() => process.exit(1));
});
Run Code Online (Sandbox Code Playgroud)

控制台错误

GET /admin/subtask/ 500 2597.597 ms - 120
C:\Users\Ajit Pradhan\Documents\taskProvider\server\node_modules\mongoose\lib\helpers\promiseOrCallback.js:19
            throw error;
            ^

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:470:11)
    at ServerResponse.header (C:\Users\Ajit Pradhan\Documents\taskProvider\server\node_modules\express\lib\response.js:771:10)
    at ServerResponse.send (C:\Users\Ajit Pradhan\Documents\taskProvider\server\node_modules\express\lib\response.js:170:12)
    at ServerResponse.json (C:\Users\Ajit Pradhan\Documents\taskProvider\server\node_modules\express\lib\response.js:267:15)
    at SubTask.find.populate.exec (C:\Users\Ajit Pradhan\Documents\taskProvider\server\routes\Admin\subtask.js:19:13)
    at C:\Users\Ajit Pradhan\Documents\taskProvider\server\node_modules\mongoose\lib\model.js:4828:16
    at C:\Users\Ajit Pradhan\Documents\taskProvider\server\node_modules\mongoose\lib\helpers\promiseOrCallback.js:16:11
    at C:\Users\Ajit Pradhan\Documents\taskProvider\server\node_modules\mongoose\lib\model.js:4851:21
    at (anonymous function).call (C:\Users\Ajit Pradhan\Documents\taskProvider\server\node_modules\mongoose\lib\query.js:4357:18)      
    at C:\Users\Ajit Pradhan\Documents\taskProvider\server\node_modules\mongoose\lib\query.js:4379:14
    at C:\Users\Ajit Pradhan\Documents\taskProvider\server\node_modules\mongoose\lib\query.js:1935:23
    at C:\Users\Ajit Pradhan\Documents\taskProvider\server\node_modules\mongoose\lib\model.js:4828:16
    at C:\Users\Ajit Pradhan\Documents\taskProvider\server\node_modules\mongoose\lib\helpers\promiseOrCallback.js:16:11
    at C:\Users\Ajit Pradhan\Documents\taskProvider\server\node_modules\mongoose\lib\model.js:4851:21
    at next (C:\Users\Ajit Pradhan\Documents\taskProvider\server\node_modules\mongoose\lib\model.js:4269:14)
    at C:\Users\Ajit Pradhan\Documents\taskProvider\server\node_modules\mongoose\lib\model.js:4298:7
Emitted 'error' event at:

[nodemon] app crashed - waiting for file changes before starting...
^Z
Run Code Online (Sandbox Code Playgroud)

响应 { "error": { "status": 500, "message": "尚未为模型 \"Task\" 注册架构。\n使用 mongoose.model(name, schema)" } }

Nik*_* B. 6

尝试引用已定义的架构而不是字符串值。

子任务模型.js

const mongoose = require('mongoose')
const Task = require('./TaskModel') // <- get the schema

const SubTaskSchema = new mongoose.Schema({
    subtask_name: {
        type: String,
        trim:true,
        required: [true, 'Please add a subtask title']
    },
    subtask_icon: {
        type: String
    },
    subtask_images: {
        type: String
    },

    slogan: {
        type: String
    },
    question: {
        type: String
    },
    createdID: {
        type: Date,
        default: Date.now
    },
    task: {
        type: mongoose.Schema.Types.ObjectId,
        ref: Task // <- notice it's not String anymore
    }
});

module.exports = mongoose.model('SubTask', SubTaskSchema);
Run Code Online (Sandbox Code Playgroud)