NodeJS Expressjs请求方法类型错误:无法读取未定义的属性“method”

6l7fqoea  于 2023-03-01  发布在  Node.js
关注(0)|答案(4)|浏览(130)

我在运行node express服务器时遇到错误:

    • 索引. 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(索引. 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;
    • 全部内容.控制器**
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;
    • 错误消息:**

节点模块\表达式\库\路由器\索引. js:138调试("分派% s % s",请求方法,请求URL);^

TypeError: Cannot read property 'method' of undefined

我不知道我做错了什么,我该怎么解决这个问题?

iyr7buue

iyr7buue1#

你在命名文件的方式上有几个错误。我看到你把你的模型命名为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');
kyxcudwk

kyxcudwk2#

todos. conbrowler检查方法没有一个请求和响应对象作为参数,也没有必要使用超时或承诺,您可以将其更改为:

    • 全部内容.控制器**
const tasklist = require('./todos.model');

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

bxgwgixi3#

6个小时后,我得到了问题;
问题是i模块如何输出“控制器”;

待办事项控制器
错误的方式:

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类型的导出模块,并承诺是不是一个问题,这是你的选择瞧
感谢所有的帮助!!!

1u4esq0p

1u4esq0p4#

我也遇到过同样的问题,是因为我把文件分割成了单独的模块,并且漏掉了这一行

const app = express();

在via“require”包含文件中(在包含的基本文件中,您也有这个)。
也许会有帮助。

相关问题