Express.js Req.method TypeError:无法读取未定义的属性“ method”

时间:2019-02-21 14:45:37

标签: javascript node.js api express

运行节点快递服务器时出现错误:

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 :(得分:0)

您在命名文件时有一些错误。我看到您已将模型命名为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');

答案 1 :(得分:0)

todos.constroller检查方法没有requestresponse对象作为参数,也不需要使用超时或Promise,可以将其更改为:

todos.constroller

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

module.exports = {
    check: (req, res, next) => {
      tasklist.find({})
      .then(data => {
          res(data);
      })
      .then(err => {
          console.log(err);
      });
    }
}

答案 2 :(得分:0)

6小时后,我遇到了问题;

问题在于我如何module.exports“ constrollers”;

todos.controller

错误的方式:

DSJwtBearerOptions

正确的方法:

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;

我应该将导出模块设置为json类型,并且promise不是问题,这是您选择的 贴子

感谢所有帮助!