Node.js | TypeError:[...]不是函数

时间:2017-10-07 12:04:54

标签: javascript node.js mongoose

在我的主文件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

为什么会这样?我不认为我有循环依赖,也没有拼错任何东西。谢谢:))

2 个答案:

答案 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"));

工作正常