Expressjs Req.method TypeError: Невозможно прочитать свойство 'method' из undefined - PullRequest
0 голосов
/ 21 февраля 2019

У меня ошибка при запуске сервера экспресс-узла:

index.js.

const
    bodyParser = require('body-parser'),
    express = require('express'),
    path = require('path');

const config = require('./config');

const app = express();

const mongoose = require('mongoose');

const apiTodos = require('./api/todos');

// connection mongodb via mongoose;
mongoose.connect('mongodb://localhost:27017/todoslist', { useNewUrlParser: true });

app.use(bodyParser.json());

app.use('/api/todos', apiTodos);

app.use('/', express.static(path.resolve(app.get('appPath'))));

app.listen(config.port, (err) => {
    if (err) { return console.log('Error:', err); }
    console.log('Listening on port %d', config.port);
});
module.exports = app;

. / Api / todos (указать вindex.js)

const express = require('express');
const Router = express.Router();

const controller = require('./todos.controller');

let router = new Router();

router.get('/check', controller.check);

module.exports = router;

todos.constroller

const tasklist = require('./todos.model');

    let check = new Promise((resolve, reject) => {
        setTimeout(function() {
            (req, res) => {
                tasklist.find({})
                .then(data => {
                    resolve(console.log(data));
                    // resolve(res.status(200).json({ doc: data }));
                })
                .then(err => {
                    console.log(err);
                    // res.status(503).json({ msg: err });
                });
            }
        }, 300);
    });
    module.exports = check;

Сообщение об ошибке:

node_modules \ express \ lib \ router \ index.js: 138 отладка ('отправка% s% s', req.method, req.url);^

TypeError: Cannot read property 'method' of undefined

Я не знаю, что я сделал не так, как я могу решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019
Метод проверки

todos.constroller не имеет объектов request и response в качестве параметров, и нет необходимости использовать тайм-ауты или обещания, вы можете изменить его следующим образом:

todos.constroller

const tasklist = require('./todos.model');

module.exports = {
    check: (req, res, next) => {
      tasklist.find({})
      .then(data => {
          res(data);
      })
      .then(err => {
          console.log(err);
      });
    }
}
0 голосов
/ 22 февраля 2019

через 6 часов после этого у меня возникла проблема;

проблема в том, как я module.exports "constrollers";

todos.controller

неправильный путь:

const tasklist = require('./todos.model');

    let check = new Promise((resolve, reject) => {
        setTimeout(function() {
            (req, res) => {
                tasklist.find({})
                .then(data => {
                    resolve(console.log(data));
                    // resolve(res.status(200).json({ doc: data }));
                })
                .then(err => {
                    console.log(err);
                    // res.status(503).json({ msg: err });
                });
            }
        }, 300);
    });
    module.exports = check;

и правильный путь:

const tasklist = require('./todos.model');
module.exports = {
  check: (req, res, next) => {
        tasklist.find({})
        .then(data => {
          if (data === null) {
            res.status(404).json({ errmsg: 'aucune Competences trouver' });
          } else {
            res.status(200).json({ errmsgok: 'cool', doc: data });
          }
        })
        .catch(() => {
          console.log(err);
        });
  }
};

у меня должны быть модули экспорта в формате json, и обещание не проблема, это ваш выбор voilà

спасибо за всю помощь !!!

0 голосов
/ 21 февраля 2019

У вас есть пара ошибок в названии ваших файлов.Я вижу, что вы назвали свою модель todo.model, а свой контроллер - todo.controller.Это расширения файлов?Если это так, они не могут быть.Пожалуйста, переименуйте ваши файлы в todo.js.Вы можете поместить их в отдельные папки, чтобы сохранить модель и контроллер отдельно.

\models
  \todo.js //This can contain your models
\controllers
  \todo.js // This can contain your controllers.

Вы можете ссылаться на них как

const todoController = require('../controllers/todo');
const todoModel = require('../models/todo');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...