throw new TypeError('app.use() 需要中间件函数') - 表示应用程序错误

Posted

技术标签:

【中文标题】throw new TypeError(\'app.use() 需要中间件函数\') - 表示应用程序错误【英文标题】:throw new TypeError('app.use() requires middleware functions') - express application errorthrow new TypeError('app.use() 需要中间件函数') - 表示应用程序错误 【发布时间】:2018-02-18 13:32:57 【问题描述】:

我找不到问题出在哪里,并且 nodejs 控制台没有说太多。

错误:

TypeError: app.use() 需要中间件函数 在 EventEmitter.use (C:\Users\Ezequiel\Desktop\mobile_standard\server\StandardServer\node_modules\express\lib\application.js:210:11) 在对象。 (C:\Users\Ezequiel\Desktop\mobile_standard\server\StandardServer\app.js:21:5) 在 Module._compile (module.js:409:26) 在 Object.Module._extensions..js (module.js:416:10) 在 Module.load (module.js:343:32) 在 Function.Module._load (module.js:300:12) 在 Function.Module.runMain (module.js:441:10) 启动时 (node.js:139:18) 在 node.js:968:3

app.js(第 21 行 -> app.use(require('./controllers/login'));)

const express = require('express');
const cors = require('cors');
const bodyParser= require('body-parser');
const MongoClient = require('mongodb').MongoClient
const mongoose = require('mongoose');
const jwt = require('jsonwebtoken'); 
const app = express();

var config = require('./config'); 
var User = require("./models/user"); 

app.use(cors());
app.options('*', cors());
app.use(bodyParser.urlencoded(extended: false));
app.use(bodyParser.json());

mongoose.connect(config.database); 
app.set('superSecret', config.secret);

app.use(require('./middlewares/auth'));
app.use(require('./controllers/login'));    

app.get('/normal', function(req,res)
    res.json(
        prueba:'recibido',
        success: true
    )
)

app.listen(process.env.PORT || 8081, () => 

    )

控制器 - 登录,这就是问题所在。关于 Express 我看不到的东西。:

var express = require('express');
var jwt = require('jsonwebtoken');
var auth = require('../middlewares/auth');
var apiRoutes = express.Router(); 
var User = require("../models/user");

apiRoutes.post('/authenticate',auth, function(req, res) 
    User.findOne(
        email: req.body.user.email
    , function(err, user)

        if (err) throw err;

        if (!user)
            //res.json(success: false, message: 'No encontramos tu usuario registrado!');
            //Crear nuevo usuario
            var newUser = new User(req.body.user);
            newUser.save(function(err)
                if(err) throw err;
                var token = jwt.sign(newUser, app.get('superSecret'),

                );

                  res.json(
                      success: true,
                      token: token
                    ); 
                )

        else if (user)
            var token = jwt.sign(user, app.get('superSecret'),

            );

              res.json(
                  success: true,
                  token: token
                ); 
        

    )
)


    apiRoutes.get('/testToken', function(req, res)
        res.json(
            msg: 'token funciona'
        )
    )

【问题讨论】:

【参考方案1】:

登录控制器没有导出任何内容。

只需将其添加到登录控制器文件的末尾即可:

module.exports = apiRoutes

有关module.exports 的更多信息可以在此question 或Docs 中找到

【讨论】:

以上是关于throw new TypeError('app.use() 需要中间件函数') - 表示应用程序错误的主要内容,如果未能解决你的问题,请参考以下文章

throw new TypeError(`$relative(cwd, fileName): Emit skipped`)

node.js 错误 - throw new TypeError('first argument must be a string or Buffer');

运行 gulp 给出“path.js:7 throw new TypeError('Path must be a string. Received ' + inspect(path));”

throw new ERR_INVALID_ARG_TYPE('chunk',['string','Buffer'],chunk);TypeError[ERR_INVALID_ARG_TYPE]:“c

node_modules/express/lib/router/index.js:458 throw new TypeError('Router.use() requires a middleware

Flux Utils TypeError:没有'new'就不能调用类构造函数App