静态模式方法:不能读取未定义的属性'myFindOrCreate'

为了在我的mongoose-Schemas上运行,我喜欢创build静态方法,但是我不得不承认,这是我第一次尝试使MEAN栈后端启动并运行。 前端和快速路由工作正常,所以我们首先集中在架构

// tracking.model.ts import mongoose from 'mongoose'; var Schema = mongoose.Schema; var TrackingModuleSchema = new Schema ({ // internal _id modulename : { type: String, required:true,unique:true }, }); TrackingModuleSchema.statics.myFindByName= function (name,cb) { return this.findOne( {name:new RegExp(name,'i')},cb); }; TrackingModuleSchema.statics.myFindOrCreate = function (name,cb) { this.myFindByName(name,function(err,modules) { console.error(err); console.log(modules); cb(err,modules); // TODO return module._id.... }); }; // Create a `schema` for the Tracking object var TrackingSchema = new Schema({ // _id internal. timestamp: {type: Date }, sequence : { type: Number }, module: { type: Schema.Types.ObjectId, ref: 'TrackingModule' }, severity: { type: String}, action: { type: String }, from: { type: String }, to: { type: String }, }); // removed some code (Static methods to TrackingSchema)... // create schema objects var TrackingModule = mongoose.model('TrackingModule',TrackingModuleSchema); var Tracking = mongoose.model('Tracking',TrackingSchema); // module.exports all objects... module.exports = function ( ) { return { TrackingModule : TrackingModule , Tracking : Tracking, }; } 

现在,导入和使用模式的路由

 const express = require('express'); const router = express.Router(); import {Tracking,TrackingModule} from '../models/tracking.model'; router.get('/module', (req,res) => { var moduleName = ''; if (req.query.moduleName) { moduleName = req.query.moduleName; } else { console.log('Empty tracking-moduleName'); res.send(500); return; } // the error happens in the following line: TrackingModule.myFindOrCreate(moduleName,function(err,msgId){ if (err) { console.error(err); // errors with tracking ->console... res.send(500); } else { res.json( msgList ); } }); }); // removed code for other gets and posts, not releveant to the error. module.exports = router; 

错误TypeError: Cannot read property 'myFindOrCreate' of undefined即使我尝试重命名静态函数的名称,也TypeError: Cannot read property 'myFindOrCreate' of undefined 。 是的,我还没有完成myFindOrCreate的实现。 在此之前,导入没有被识别,所以我已经按照这个指令安装了babel-cli 6.23.0。 我正在使用我的package.json中的开始skript:

  "scripts": { "ng": "ng", "start": "ng serve", "test": "ng test", "lint": "ng lint", "e2e": "ng e2e", "starts": "nodemon server/server.js --watch server --exec babel-node", "builds": "babel lib -d server.dist", "serve": "node server.dist/server.js", "tests": "mocha --compilers js:babel-register" }, 

然而,我没有设法build立,服务和testing,我会在稍后检查。 现在我已经检查了问题编辑器右侧的所有“类似问题”以及编辑器上面的所有“可能已经有答案的问题”,没有任何帮助。

在你的tracking.model.ts文件中,而不是这个:

 module.exports = function() { return { TrackingModule: TrackingModule, Tracking: Tracking, }; } 

使用export关键字,如下所示:

 export const TrackingModule = TrackingModule; export const Tracking = Tracking; 

您不能混淆旧的module.exports模式与ES6 export-import模式。 他们处理不同。