node.js - 错误:Route.post() 需要一个回调函数,但得到一个 [object Undefined],不知道如何继续
问题描述
为了让您了解情况,我不知道如何使用 mongodb、mongoose 和下面显示的所有其他工具。很久以前我使用教程来实现此代码,现在我看到自己需要扩展我正在从事的项目。所以现在我试图在这里和那里从头开始以形成所需的代码。
情况是我正在复制所需的文件以创建另一个模型/集合。我拥有与“用户”相关的所有文件,现在我愿意对“repair_dispatches”进行 CRUD (如下所示的“partes_reparacion”)。
因此,在名为 server.js 的主文件中:
'use strict'
const express = require('express');
const app = express();
const cors = require('cors');
const bodyParser = require('body-parser');
const bodyParserJSON = bodyParser.json({limit: '50mb',extended:true});
const bodyParserURLEncoded = bodyParser.urlencoded({extended: true, limit: '50mb'});
const configMensaje = require('./configMensaje');
const authRoutes = require('./auth/auth.routes');
const router = express.Router();
const properties = require('./auth/config/properties');
const DB = require('./auth/config/db');
const expressjwt = require('express-jwt');
const reparacionesRoutes = require('./reparaciones/reparaciones.routes');
DB();
app.use(bodyParserJSON);
app.use(bodyParserURLEncoded);
app.use(cors({origin: "*"}))
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Authorization, X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Allow-Request-Method');
res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, DELETE');
res.header('Allow', 'GET, POST, OPTIONS, PUT, DELETE');
next();
});
app.use('/api',router);
authRoutes(router);
reparacionesRoutes(router); <<--this is the line that when inserted, gives the error.
router.get('/', (req,res)=>{
res.send('Hello from home');
});
app.use(router);
app.listen(properties.PORT, () => console.log(`Server running on port ${properties.PORT}`));
我刚刚从我的 auth 文件夹中复制了文件,其中包括:auth.controller.js、auth.dao.js、auth.model.js 和 auth.routers.js,为修复模型创建了另一个文件夹,并更改了所有相关内容,保持结构不变:
reparaciones.controller.js
const parte = require('./reparaciones.dao');
const jwt = require('jsonwebtoken')
exports.guardarParte = (req,res,next) =>{
/* console.log("request:xxxxxxxxxx "+JSON.stringify(req.body)); */
const newParte = {
id: req.body.id,
nombre: req.body.nombre,
telefono: req.body.telefono,
ref: req.body.ref,
marca: req.body.marca,
fecha: req.body.fecha,
averia: req.body.averia
}
console.log(req.body);
parte.update({'id':newParte.id},newParte, (err,res)=>{
if(err && err.code === 11000){
return res.status(409).send("El parte ya existe(?)");
}
if(err){
console.log(err);
return res.status(500).send("No se ha podido crear el parte");
}
//response
res.send(newParte)
})
}
reparaciones.dao.js
const mongoose = require('mongoose');
const authSchema = require('./reparaciones.model');
authSchema.statics = {
guardar: function (data,cb){
const parte = new this(data);
parte.guardar(cb);
},
borrar: function (data,cb){
const parte = new this(data);
parte.delete(cb);
},
buscaruno: function(query,cb){
this.find(query,cb);
},
cargartodos: function(query,cb){
this.find(query,cb);
}
}
const authModel = mongoose.model('partes_reparacion',authSchema);
module.exports = authModel;
reparaciones.model.js
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
mongoose.set('useCreateIndex',true);
mongoose.set('useUnifiedTopology',true);
const reparacionSchema = new Schema({
id: {
type: String,
required: false,
trim: true,
unique: true
},
nombre: {
type: String,
required: false,
trim: true,
unique: true
},
telefono: {
type: Number,
required: false,
trim: true
},
ref: {
type: String,
required: false,
trim: true
},
marca: {
type: String,
required: false,
trim: true
},
fecha: {
type: String,
required: false,
trim: true
},
averia: {
type: String,
required: false,
trim: true
},
},{
timestamps: true
});
module.exports = reparacionSchema;
reparaciones.routes.js
const Parte = require('./reparaciones.controller');
module.exports = (router)=>{
router.post('/guardarParte', Parte.guardarParte);
router.post('/buscaruno', Parte.buscarUnParte);
router.post('/cargartodos', Parte.cargarTodosPartes);
}
因此,这 4 个文件只是对 auth 文件的修改,它们可以正常工作。但是在 server.js 中添加行时“reparacionesRoutes(router);” 如第一个代码片段所示,我得到了提到的错误。我不知道为什么仅仅通过包含另一个实例就会给出错误。
此外,在使用 npm start 启动服务器后,它会转到 mongodb://localhost:27017/users。它不应该从根目录开始,所以我根据帖子网址转到所需的路线吗?
解决方案
可能不是您正在寻找的答案。只是提到一些我注意到的事情。
在下面的代码中,您将导入./reparaciones.controller
为Parte
. 但是您只能guardarParte
像这样从控制器中导出:- exports.guardarParte = (req,res,next) =>{
。
我没有在您共享的文件中看到exports.buscarUnParte
和exports.cargarTodosPartes
。(我假设您共享了完整的文件)。
因此Parte.buscarUnParte
,并且Parte.cargarTodosPartes
评估为未定义。
const Parte = require('./reparaciones.controller');
module.exports = (router)=>{
router.post('/guardarParte', Parte.guardarParte);
router.post('/buscaruno', Parte.buscarUnParte); //2nd parameter is undefined
router.post('/cargartodos', Parte.cargarTodosPartes); //2nd parameter is undefined
}
希望这将为您指明正确的方向。
推荐阅读
- javascript - javascript中的对象以数组开头是什么意思
- asp.net-core - ASP NET CORE 身份和校验令牌 URL
- regex - 带有和不带分隔符的文本文件将转换为带有列标题的 pandas 数据框
- node.js - Elasticsearch 错误:[parsing_exception] [match_phrase] 查询不支持 [first_name]
- r - R - 在另一个数据框中逐行子集
- c# - 使用 Selenium ChromeDriver 打开 chrome 浏览器时遇到一些问题
- python - Openflow 多部分请求错误消息:OFPBRC_BAD_LEN (6)
- slack - Outlook 收到新电子邮件后,触发器未在主题行上触发
- github - 将后端和前端文件夹合并到一个新文件夹后,是否应该从它们中删除跟踪?
- r - 无法更改 y 轴刻度