需要中间件功能的路由
Route requiring a middleware function
我正在使用 socket.io
在 nodejs 中创建我的路由模块
var express = require("express"); // call express
var taskSchema = require("../models/taskModel");
var mongoose = require("mongoose");
var router = express.Router(); // get an instance of the express Router
module.exports = function (io) {
router.use(function (req, res, next) {
io.sockets.emit('payload');
console.log("Something is happening.");
next();
});
router
.route("/tasks")
.post(function (req, res, next) {
...
});
router
.route("/tasks")
.get(function (req, res) {
...
});
};
当我编译服务器时出现这个错误
TypeError: Router.use() requires a middleware function but got a undefined
当调用该函数时,它将 return 等同于未定义。此外,通常在端点之前定义路由。它的结构通常如下:
let myRouter = new Router();
Router.use('something', middlewareFunction, someotherprocess);
在我看来,问题可能出在加载此模块的代码中,因为您从未导出实际的路由器。因此,假设您在加载此模块的调用者中执行 app.use()
或 router.use()
,您不会 return 从您的函数中访问路由器,因此无法挂钩该路由器,您会得到你看到的错误。
我猜你可以通过 return 从导出的函数中访问路由器来解决这个问题:
var express = require("express"); // call express
var taskSchema = require("../models/taskModel");
var mongoose = require("mongoose");
var router = express.Router(); // get an instance of the express Router
module.exports = function (io) {
router.use(function (req, res, next) {
io.sockets.emit('payload');
console.log("Something is happening.");
next();
});
router
.route("/tasks")
.post(function (req, res, next) {
...
});
router
.route("/tasks")
.get(function (req, res) {
...
});
return router; // <=========== Add this
};
然后,当你这样做时:
let m = require('yourModule');
router.use(m(io));
然后函数将 return router.use()
满意的路由器。您可以将中间件或路由器传递给 .use()
.
如果这个猜测不太准确,请向我们展示加载和调用此模块的代码。
我正在使用 socket.io
在 nodejs 中创建我的路由模块var express = require("express"); // call express
var taskSchema = require("../models/taskModel");
var mongoose = require("mongoose");
var router = express.Router(); // get an instance of the express Router
module.exports = function (io) {
router.use(function (req, res, next) {
io.sockets.emit('payload');
console.log("Something is happening.");
next();
});
router
.route("/tasks")
.post(function (req, res, next) {
...
});
router
.route("/tasks")
.get(function (req, res) {
...
});
};
当我编译服务器时出现这个错误
TypeError: Router.use() requires a middleware function but got a undefined
当调用该函数时,它将 return 等同于未定义。此外,通常在端点之前定义路由。它的结构通常如下:
let myRouter = new Router();
Router.use('something', middlewareFunction, someotherprocess);
在我看来,问题可能出在加载此模块的代码中,因为您从未导出实际的路由器。因此,假设您在加载此模块的调用者中执行 app.use()
或 router.use()
,您不会 return 从您的函数中访问路由器,因此无法挂钩该路由器,您会得到你看到的错误。
我猜你可以通过 return 从导出的函数中访问路由器来解决这个问题:
var express = require("express"); // call express
var taskSchema = require("../models/taskModel");
var mongoose = require("mongoose");
var router = express.Router(); // get an instance of the express Router
module.exports = function (io) {
router.use(function (req, res, next) {
io.sockets.emit('payload');
console.log("Something is happening.");
next();
});
router
.route("/tasks")
.post(function (req, res, next) {
...
});
router
.route("/tasks")
.get(function (req, res) {
...
});
return router; // <=========== Add this
};
然后,当你这样做时:
let m = require('yourModule');
router.use(m(io));
然后函数将 return router.use()
满意的路由器。您可以将中间件或路由器传递给 .use()
.
如果这个猜测不太准确,请向我们展示加载和调用此模块的代码。