【问题标题】:I keep getting the following error message -TypeError: Todo.createDocument is not a function我不断收到以下错误消息 -TypeError:Todo.createDocument 不是函数
【发布时间】:2019-08-20 23:01:43
【问题描述】:

每次我运行以下命令:

-$ curl -X POST -d '{ "text": "Item something", "done": true }' --header "Content-Type: application/json" localhost:3000/todos 

我收到以下错误:

TypeError: Todo.createDocument 不是函数

app.js


const app = express();

const port = 3000;

const router = express.Router();

const bodyParse = require('body-parser');

const Todo = require('./todo');

router.get('/', (req, res) => res.send('Hello World!'));

router.route('/todos')
  .get((req, res) => {
    Todo.all(function(data){
      console.log('Retrieving all Todos');
      res.json(data);
    })

  })
  .post((req, res) => {
    Todo.createDocument(req.body, function(data){
      console.log('Todo created with id ${data._id}');
      res.json(data);
    })
  })


app.use('/', router);

app.listen(port, () => console.log('Example app listening on port 
${port}!'));

控制台日志

TypeError: Todo.createDocument is not a function
    at router.route.get.post (/Users/robbrown/node-todo-api/app.js:20:10)
    at Layer.handle [as handle_request] (/Users/robbrown/node-todo-api/node_modules/express/lib/router/layer.js:95:5)
    at next (/Users/robbrown/node-todo-api/node_modules/express/lib/router/route.js:137:13)
    at next (/Users/robbrown/node-todo-api/node_modules/express/lib/router/route.js:131:14)
    at Route.dispatch (/Users/robbrown/node-todo-api/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/Users/robbrown/node-todo-api/node_modules/express/lib/router/layer.js:95:5)
    at /Users/robbrown/node-todo-api/node_modules/express/lib/router/index.js:281:22
    at Function.process_params (/Users/robbrown/node-todo-api/node_modules/express/lib/router/index.js:335:12)
    at next (/Users/robbrown/node-todo-api/node_modules/express/lib/router/index.js:275:10)
    at Function.handle (/Users/robbrown/node-todo-api/node_modules/express/lib/router/index.js:174:3)
    at router (/Users/robbrown/node-todo-api/node_modules/express/lib/router/index.js:47:12)
    at Layer.handle [as handle_request] (/Users/robbrown/node-todo-api/node_modules/express/lib/router/layer.js:95:5)
    at trim_prefix (/Users/robbrown/node-todo-api/node_modules/express/lib/router/index.js:317:13)
    at /Users/robbrown/node-todo-api/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/Users/robbrown/node-todo-api/node_modules/express/lib/router/index.js:335:12)
    at next (/Users/robbrown/node-todo-api/node_modules/express/lib/router/index.js:275:10)

这是我的 todo.js 文件,希望有人能帮我解决这个问题。在过去的几天里,我一直在努力寻找答案。出于某种原因,SO不会让我添加这个??错误消息帖子主要是代码。

## todo.js ##

const mongoose = require('mongoose');

mongoose.set('useFindAndModify', false);

mongoose.connect('mongodb://localhost:27017', { useNewUrlParse: true });

const db = mongoose.connection;

db.on('error', console.error.bind(console, 'connection error:'));

db.once('open', function(){
  console.log('Connected to MongoDb!');
});

const todoSchema = new mongoose.Schema({
  text: String,
  done: Boolean
})

todoSchema.statics.createDocumnent = function(params, callback){
  return Todo.create({ text: params.text, done: params.done },
    function (err, todo) {
      if (err) return handleError(err);
      callback(todo);
    }
  )
}
todoSchema.statics.all = function(callback){
  return Todo.find({}, function(err, todos){
    callback({ todos: todos });
  })
}
const Todo = mongoose.model('Todo', todoSchema);

module.exports = Todo;




【问题讨论】:

  • 它说Todo.createElement 不是一个函数。但是你分享的代码实际上并没有显示任何关于 Todo 的信息。请与我们分享todo.js中的代码
  • 好吧,显示todo 模块的代码。它应该在todo.js 文件中,与app.js 位于同一目录中。然后我们会看到,它是否包含createDocument 方法。可能不是,因为这就是错误消息所说的内容。

标签: node.js mongoose mongoose-schema


【解决方案1】:

post((req, res) => { Todo.createDocument(req.body, function(data){ console.log('使用 id ${data._id} 创建的待办事项'); res.json(数据); }) })

当您调用createDocument() 函数时,问题就在这里。在您的 Todo 类中找不到函数 createDocument

现在,我在这里看不到 Todo 类是什么,但如果它从父类(即 DOMImplementation 类)继承方法,请检查您的继承引用或在您的 @ 中添加 createDocument 函数987654326@班级。

【讨论】:

  • 您正在对信息进行大量解释和猜测,OP 给出了。唯一,我们现在确定的是:有一个模块 Todo 应该有一个 createDocument 方法,但没有。
  • 你是绝对正确的,但它确实有帮助,因为我还不能发表评论,而其他评论的人只是要求Todo 代码。如果该类继承了方法,那么方法 createDocument 应该可供该继承类引用,即使它没有在类本身中定义。我已经根据现有信息向他提供了可能的解决方案。我将修改我的答案以减少假设性。
猜你喜欢
  • 2014-04-12
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-08
  • 2021-04-23
  • 2021-02-02
  • 1970-01-01
相关资源
最近更新 更多