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()
,它需要中间件函数引用。
看起来你应该有这个错误的堆栈跟踪(如果你学会了如何解释它)指向导致问题的确切代码行(堆栈上的几步)应该简化调试下次
一个问题。我正在用 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
.
您错误地使用了 app.use()
而不是 app.set()
。
改变这个:
app.use('port', process.env.PORT || 3000)
对此:
app.set('port', process.env.PORT || 3000)
出现错误是因为您将字符串或数字传递给 app.use()
,它需要中间件函数引用。
看起来你应该有这个错误的堆栈跟踪(如果你学会了如何解释它)指向导致问题的确切代码行(堆栈上的几步)应该简化调试下次