Я продолжаю получать следующее сообщение об ошибке -TypeError: Todo.createDocument не является функцией - PullRequest
0 голосов
/ 30 марта 2019

Каждый раз, когда я запускаю следующую команду:

-$ 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. Надеюсь, кто-нибудь поможет мне разобраться в этом.Я пытался найти ответ в течение последних нескольких дней.Почему-то ТАК не позволит мне добавить это ??Сообщение об ошибке в основном код.

## 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;




1 Ответ

0 голосов
/ 30 марта 2019

post ((req, res) => {Todo.createDocument (req.body, function (data) {console.log ('Todo создан с идентификатором $ {data._id}'); res.json(данные);})})

Проблема здесь, когда вы вызываете функцию createDocument().Функция createDocument не найдена в вашем Todo классе.

Теперь я не могу увидеть, что это за класс Todo, но если он наследует методы от родительского класса (т.е.Класс DOMImplementation), затем проверьте ссылку на наследование или добавьте функцию createDocument в свой класс Todo.

...