在我的主文件server.js中,我有以下功能:
server.js
const mongoose = require('mongoose');
const SmallRounds = require('./models/smallrounds.js');
function initRound(){
logger.info('Initializing round...');
SmallRounds.getLatestRound((err, data) => {
[...]
});
}
函数getLatestRound()在我的mongoose模型smallrounds.js中导出
smallrounds.js
const mongoose = require('mongoose');
const config = require('../config.js');
const SmallRoundsSchema = mongoose.Schema({
[...]
});
const SmallRounds = module.exports = mongoose.model('SmallRounds', SmallRoundsSchema);
module.exports.getLatestRound = function(callback){
SmallRounds.findOne().sort({ created_at: -1 }).exec((err, data) => {
if(err) {
callback(new Error('Error querying SmallRounds'));
return;
}
callback(null, data)
});
}
但是当我调用initRound()时出现以下错误:
TypeError:SmallRounds.getLatestRound不是函数
在initRound(E:\ Projects \ CSGOOrb \ server.js:393:14)
在Server.server.listen(E:\ Projects \ CSGOOrb \ server.js:372:2)
在Object.onceWrapper(events.js:314:30)
在emitNone(events.js:110:20)
在Server.emit(events.js:207:7)
在emitListeningNT(net.js:1346:10)
在_combinedTickCallback(internal / process / next_tick.js:135:11)
at process._tickCallback(internal / process / next_tick.js:180:9)
在Function.Module.runMain(module.js:607:11)
在启动时(bootstrap_node.js:158:16)
在bootstrap_node.js:575:3
为什么会这样?我不认为我有循环依赖,也没有拼错任何东西。谢谢:))
答案 0 :(得分:2)
这不是你如何向Mongoose模型/模式添加方法。
试试这个:
const mongoose = require('mongoose');
const config = require('../config.js');
const SmallRoundsSchema = mongoose.Schema({
[...]
});
SmallRoundsSchema.statics.getLatestRound = function(callback){
this.findOne().sort({ created_at: -1 }).exec((err, data) => {
if(err) {
callback(new Error('Error querying SmallRounds'));
return;
}
callback(null, data)
});
}
const SmallRounds = module.exports = mongoose.model('SmallRounds', SmallRoundsSchema);
您可以在“静态”部分阅读文档:http://mongoosejs.com/docs/guide.html。还有其他更好的方法可以实现相同的结果,但这会让你开始。
答案 1 :(得分:0)
我正在使用大写模块,并且收到错误TypeError: upperCase is not a function
l
et upperCase =require("upper-case") ;
res.end(upperCase("Hello World"));
以此方式编写的每个教程。
我将其更改为
res.end(upperCase.upperCase("Hello World"));
工作正常