【问题标题】:TypeError: app.use() requires a middleware functionTypeError: app.use() 需要一个中间件函数
【发布时间】:2019-07-07 21:29:31
【问题描述】:

每次我在添加用户路由后尝试运行应用程序时都会出现类似这样的错误

C:\Users\adity\Desktop\thinkster\medium-api\node_modules\express\lib\application.js:210
    throw new TypeError('app.use() requires a middleware function')
    ^

TypeError: app.use() requires a middleware function
    at Function.use (C:\Users\adity\Desktop\thinkster\medium-api\node_modules\express\lib\application.js:210:11)
    at Object.<anonymous> (C:\Users\adity\Desktop\thinkster\medium-api\app.js:15:5)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)
[nodemon] app crashed - waiting for file changes before starting...

这是我的文件结构

app.js

const app = express();
app.use('./routes');

路由/index.js

const express = require('express');
const router = express.Router();
router.use('/api', require('./api'));
module.exports = router;

routes/api/index.js

const express = require('express');
const router = express.Router();
router.use('/', require('./users'));
module.exports = router;

routes/api/users.js

const express = require('express');
const router = express.Router();
router.get('/users', (req, res) => res.send('Hello world'));
module.exports = router;

我找到了一个名为 realworld.io 的网站,我正在关注一种制作 nodejs API 的方法,但我每次都被卡住了。而且我找不到问题出在哪里。

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    您的app.js 中的代码app.use('./routes'); 不正确(只有一个字符串参数,违反了app.use() syntax)。

    要正确定义“路线”,代码如下所示:

    // app.js
    
    const app = express();
    const routes = require('./routes');
    
    app.use('/', routes);
    

    【讨论】:

    • @LeeGoddard 如果app.use 接受一个参数并且该参数是一个回调函数,则它是有效的。但是,如果那个参数是一个字符串,而不是一个函数,那么它是无效的。
    • 是的,我很抱歉
    猜你喜欢
    • 2015-10-17
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    • 2018-01-06
    相关资源
    最近更新 更多