Router.use() 需要一个中间件函数,但得到了一个 ' + gettype(fn))

Router.use() requires a middleware function but got a ' + gettype(fn))

一个问题。我正在用 node、express 和 mysql 制作一个 api。 而且我运行nodemon的时候好像出错了。 如果有人知道什么,将不胜感激。

错误: 抛出新的 TypeError('Router.use() requires a middleware function but got a ' + gettype(fn))

我的index.js:

const express = require('express')
const app = express()
const routes = require("./routes/transactions")

//Settings
app.use('port', process.env.PORT || 3000)

//Middlewares
app.use(express.json())

//Routes
app.use("/", routes.transactions)

 //Crear servidor con el puerto
app.listen(app.get('port'), () => {
    console.log('Hola Mundo', app.get('port'))
})

module.exports = app;

我的routes/transactions.js

const express = require('express');
const router = express.Router();
const mysqlConnection = require('../database');

router.get('/transactions', (req, res) => {
    mysqlConnection.query('SELECT * FROM transactions', (err, rows, fields) => {
        if(!err) {
            res.json(rows)
        } else {
            console.error(err)
        }
    });
});

exports.transactions = router

我的database.js

const mysql = require('mysql');

const mysqlConnection = mysql.createConnection({

   host: 'localhost',
   user: 'root',
   password: '',
   database: 'operations',
   
})

mysqlConnection.connect(function(err){
    if(err) {
        console.log(err);
        return
    } else {
        console.log('Db is connected')
    }
})

module.exports = mysqlConnection;

我认为这里的错误是由于 app.use():

的过载造成的

您可以通过两种方式使用此功能,即使用中间件和路由。

routes/transactions.js 应修改为:

const router = express.Router();
const mysqlConnection = require('../database');

router.get('/transactions', (req, res) => {
    mysqlConnection.query('SELECT * FROM transactions', (err, rows, fields) => {
        if(!err) {
            res.json(rows)
        } else {
            console.error(err)
        }
    });
});

exports.transactions = router

index.js中:

const express = require('express')
const app = express()
const routes = require("./routes/transactions")

//Settings
app.use('port', process.env.PORT || 3000)

//Middlewares
app.use(express.json())

//Routes
app.use("/", routes.transactions)

 //Crear servidor con el puerto
app.listen(app.get('port'), () => {
    console.log('Hola Mundo', app.get('port'))
})

module.exports = app;

当您导航至 localhost:<port>/transactions.

时,运行 'routes/transactions.js' 中 'get' 端点中的代码

您错误地使用了 app.use() 而不是 app.set()

改变这个:

app.use('port', process.env.PORT || 3000)

对此:

app.set('port', process.env.PORT || 3000)

出现错误是因为您将字符串或数字传递给 app.use(),它需要中间件函数引用。

看起来你应该有这个错误的堆栈跟踪(如果你学会了如何解释它)指向导致问题的确切代码行(堆栈上的几步)应该简化调试下次