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)" } }
尝试引用已定义的架构而不是字符串值。
子任务模型.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)