Express 错误中的数据库查询:Router.use() 需要中间件函数但未定义
Posted
技术标签:
【中文标题】Express 错误中的数据库查询:Router.use() 需要中间件函数但未定义【英文标题】:Database query in Express error: Router.use() requires a middleware function but got a undefined 【发布时间】:2019-12-22 01:52:56 【问题描述】:我正在我的 express 应用程序中设置控制器、模型、路由和视图。修改仅使用视图的应用程序,我收到此错误: Router.use() 需要一个中间件函数,但有一个未定义的
我让它只使用 pug 视图和 server.js 文件,但是一旦我添加了模型/控制器/路由,它就会抛出这个错误。
# server.js
// http://localhost:8099/tasks
var router = express.Router();
var tasksRouter = require('./routes/tasks');
app.use('/tasks', tasksRouter.tasks_list);
# models\tasks.js
const mysql = require('mysql');
// connection configurations
const mc = mysql.createConnection(
host: 'localhost',
user: 'root',
password: '',
database: 'mysql',
port: '2001'
);
// connect to database
mc.connect();
module.exports = mc;
# controllers\tasksController.js
var Tasks = require('../models/tasks');
// Display list of all tasks.
exports.tasks_list = function(req, res, next)
mc.query('SELECT * FROM tasks', function (error, results, fields)
if (error) throw error;
//console.log('The solution is: ', results);
res.render('tasks_list',
title: 'Results',
data: results
);
);
;
#routes\tasks.js
var express = require('express');
var router = express.Router();
// Require controller modules.
var tasks_controller = require('../controllers/tasksController');
/// ROUTES ///
// GET request for list of all tasks.
router.get('/tasks', tasks_controller.tasks_list);
module.exports = router;
#views\tasks_list.pug
extends layout
block content
h1= title
p Welcome to #title
table
for tasks in data
tr.odd(role='row')
td #tasks.id
td #tasks.task
td #tasks.status
td.dt-body-right.sorting_1 #tasks.created_at
我应该在浏览器中显示一个将表格数据解析为 html 的页面。但在我的控制台中,我得到: c:\ExpressProject4\express-node-rest-project\node_modules\express\lib\router\index.js:458 throw new TypeError('Router.use() 需要一个中间件函数但得到一个' + gettype(fn)) ^
TypeError: Router.use() 需要一个中间件函数,但有一个未定义的函数 在 Function.use (c:\ExpressProject4\express-node-rest-project\node_modules\express\lib\router\index.js:458:13) 在功能。 (c:\ExpressProject4\express-node-rest-project\node_modules\express\lib\application.js:220:21) 在 Array.forEach () 在 Function.use (c:\ExpressProject4\express-node-rest-project\node_modules\express\lib\application.js:217:7) 在对象。 (c:\ExpressProject4\express-node-rest-project\server.js:34:5) 在 Module._compile (internal/modules/cjs/loader.js:778:30) 在 Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10) 在 Module.load (internal/modules/cjs/loader.js:653:32) 在 tryModuleLoad (internal/modules/cjs/loader.js:593:12) 在 Function.Module._load (internal/modules/cjs/loader.js:585:3)
【问题讨论】:
【参考方案1】:您在此处引用的子属性tasks_list
:
app.use('/tasks', tasksRouter.tasks_list);
未在tasks/router.js
中分配-您需要重新构造导出的对象或更改require
-d 时的引用方式。
【讨论】:
不确定我是否理解。我正在使用tasks_list
告诉 tasksController.js 使用哪个路由。
tasksRouter.tasks_list
分配在哪里?
看起来我应该将 server.js 更改为 app.use('/tasks', tasksRouter);
但是现在我没有收到错误,但是在我的浏览器中,当我转到 localhost:8099/tasks 时,我得到了不能获取/任务
查看docs for app.use
,我认为/tasks
路径被定义了两次——一次在路由处理程序中,一次在您注册路径时。尝试将其更改为 app.use(tasksRouter)
这是一个问题,可能是这个错误的主要问题。现在我从 tasksController.js 文件中得到一个mc is not defined
。这是因为它在模型中定义,但不知道如何修复它。以上是关于Express 错误中的数据库查询:Router.use() 需要中间件函数但未定义的主要内容,如果未能解决你的问题,请参考以下文章
无法访问 express js router.delete 中的参数