运行节点快递服务器时出现错误:
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
我不知道自己做错了什么,我该如何解决?
答案 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检查方法没有request和response对象作为参数,也不需要使用超时或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不是问题,这是您选择的 贴子
感谢所有帮助!