簡體   English   中英

為什么 npm run 會導致錯誤:“Router.use() requires a middleware function but a ' + gettype(fn)”?

[英]Why does npm run result in the error: “Router.use() requires a middleware function but a ' + gettype(fn)”?

這是我的 server.js 文件,我在其中為我的應用程序定義了路由。

//modules
var express = require('express');
var secure = require('express-force-https');
var app = express();
var path = require('path');
var cfenv = require("cfenv");
var bodyParser = require('body-parser');
var secureKeys = require('dotenv').config()
const cors = require('cors');


app.use(secure);
// app.use(bodyParser.json());
app.use(cors());
app.options('*', cors());
// Parse URL-encoded bodies (as sent by HTML forms)
app.use(express.urlencoded({ extended: false }));
// Parse JSON bodies (as sent by API clients)
app.use(express.json());

//routers for recycling company
var cHomepageRouter = require("./routes/recyclingCompanyHomepage");
var cWasteAuditRouter = require("./routes/recyclingCompanyWasteAudit");
var cRegisterRouter = require("./routes/recyclingCompanyRegister");
var cLoginRouter = require("./routes/recyclingCompanyLogin");
var cInfomationRouter = require("./routes/recyclingCompanyInformation");
var cForgotRouter = require("./routes/wasteEntitiesForgotPassword");
var cResetRouter = require("./routes/recyclingCompanyResetPassword");
//routers for waste entities
var wHomepageRouter = require("./routes/wasteEntitiesHomepage");
var wWasteAuditRouter = require("./routes/wasteEntitiesWasteAudit");
var wRegisterRouter = require("./routes/wasteEntitiesRegister");
var wLoginRouter = require("./routes/wasteEntitiesLogin");
var wInfomationRouter = require("./routes/wasteEntitiesInformation");
var wForgotRouter = require("./routes/wasteEntitiesForgotPassword");
var wResetRouter = require("./routes/wasteEntitiesResetPassword");

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'html');

//recycling company routes
app.use('/', cHomepageRouter);
app.use("/company-register", cRegisterRouter);
app.use("/company-login", cLoginRouter);
app.use("company-reset", cResetRouter);
app.use("/comapny-audit-waste", cWasteAuditRouter);
app.use("/comapany-forgot-password", cForgotRouter);
app.use("/comapny-information", cInfomationRouter);
// waste entities routes
app.use("/w-entity", wHomepageRouter);
app.use("entity-register",wRegisterRouter);
app.use("/entity-login", wLoginRouter);
app.use("/entity-reset", wResetRouter);
app.use("/entity-waste-audit", wWasteAuditRouter);
app.use("/entity-forgot-password", wForgotRouter);
app.use("/entity-information", wInfomationRouter);

//nodemon server.js to run the server
var port = process.env.PORT || 8000
app.listen(port, function () {
    console.log("To view your app, open this link in your browser: http://localhost:" + port);
});

module.exports = app;

這是我得到的錯誤

PS C:\Users\User\Documents\GitHub\project\server> npm start

> cloudant-nodejs-crud@1.0.0 start C:\Users\User\Documents\GitHub\project\server
> node server.js

C:\Users\User\Documents\GitHub\project\server\node_modules\express\lib\router\index.js:458
      throw new TypeError('Router.use() requires a middleware function but got a ' + gettype(fn))
      ^

TypeError: Router.use() requires a middleware function but got a Object
    at Function.use (C:\Users\User\Documents\GitHub\project\server\node_modules\express\lib\router\index.js:458:13)
    at Function.<anonymous> (C:\Users\User\Documents\GitHub\project\server\node_modules\express\lib\application.js:220:21)
    at Array.forEach (<anonymous>)
    at Function.use (C:\Users\User\Documents\GitHub\project\server\node_modules\express\lib\application.js:217:7)
    at Object.<anonymous> (C:\Users\Usr\Documents\GitHub\project\server\server.js:43:5)
    at Module._compile (internal/modules/cjs/loader.js:1137:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
    at Module.load (internal/modules/cjs/loader.js:985:32)
    at Function.Module._load (internal/modules/cjs/loader.js:878:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! cloudant-nodejs-crud@1.0.0 start: `node server.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the cloudant-nodejs-crud@1.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\User\AppData\Roaming\npm-cache\_logs\2021-07-01T22_31_17_562Z-debug.log
PS C:\Users\User\Documents\GitHub\project\server>

在查看堆棧跟蹤時,錯誤似乎源於:

C:\Users\Usr\Documents\GitHub\project\server\server.js:43:5

這將是這一行:

app.use('/', cHomepageRouter)

這意味着來自這里的cHomepageRouter

var cHomepageRouter = require("./routes/recyclingCompanyHomepage");

不是路由器或中間件功能。 因此,顯然文件./routes/recyclingCompanyHomepage沒有正確地將module.exports分配為您期望的 Router 對象。


僅供參考,這是一個經典的調試案例,這些是您可以從學習中受益的步驟,因此您可以自己跟蹤這樣的錯誤:

  1. 在控制台中獲取錯誤。
  2. 檢查堆棧跟蹤並確定錯誤源自哪個文件和行
  3. 根據該行代碼正在執行的操作以及您獲得的特定錯誤,進行進一步調試以檢查此錯誤中涉及的確切值。
  4. 在這種特定情況下,您應該執行console.log(cHomepageRouter)並查看它是什么。 您可能會看到它不是路由器功能,然后您就會知道進一步查看cHomepageRouter來自的文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM