使用 Sequelize 和 Express 时出现“app.use() 需要中间件函数”错误

问题描述 投票:0回答:1

当我将此函数添加到 aparelhos.js 文件中时,会发生此错误:

function findAparelho(req, res) {
    Aparelho.findByPk(req.params.id).then((result) => res.json(result))
}

我怀疑问题可能出在 req.params.id 语句上,但我不知道是否是这样。如果我删除这个函数,代码就可以完美运行。我在此文件(app.js)上遇到此错误:

import express from 'express'
import bodyParser from 'body-parser'
import cors from 'cors'
import morgan from 'morgan'
import { sequelize } from './sequel.js'
import routes from './routes.js'

const app = express()
app.use(morgan('combined'))
app.use(bodyParser.json())
app.use(cors())
app.use(routes)

// Testando conexão do banco de dados
sequelize.sync(() => console.log("Banco de dados conectado"))

app.listen(8081, () => {
    console.log('Server is running on port 8081')
})

这是routes.js文件:

import express from "express"
import aparelhos from "./controllers/aparelho.js"

const routes = express.Router()

routes.get("/aparelhos", aparelhos.findAll)
routes.get("/aparelhos/:id", aparelhos.findAparelho)

export default { routes }

Aparelho.js:

import Aparelho from '../models/aparelhoModel.js'

function findAll(req, res) {
    Aparelho.findAll().then((result) => res.json(result))
}

function findAparelho(req, res) {
    Aparelho.findByPk(req.params.id).then((result) => res.json(result))
}

export default { findAll, findAparelho }

aparelhoModel.js 文件如下所示:

import { DataTypes } from 'sequelize'
import { sequelize } from '../sequel.js'


const Aparelho = sequelize.define('Aparelho', {
    id: {
        type: DataTypes.INTEGER,
        primaryKey: true,
        autoIncrement: true,
        allowNull: false
    },
    tipo: {
        type: DataTypes.STRING,
        allowNull: false
    }
})

Aparelho.sync({ force: false })

console.log(Aparelho === sequelize.models.Aparelho)

export default Aparelho

整个错误代码是:

/home/raphael/Projetos/eletroinfoOS/server/node_modules/express/lib/application.js:217
    throw new TypeError('app.use() requires a middleware function')
          ^

TypeError: app.use() requires a middleware function
    at Function.use (/home/raphael/Projetos/eletroinfoOS/server/node_modules/express/lib/application.js:217:11)
    at file:///home/raphael/Projetos/eletroinfoOS/server/src/app.js:13:5
    at ModuleJob.run (internal/modules/esm/module_job.js:145:37)
    at async Loader.import (internal/modules/esm/loader.js:182:24)
    at async Object.loadESM (internal/process/esm_loader.js:68:5)
node.js express sequelize.js
1个回答
0
投票

这个错误:

TypeError: app.use() requires a middleware function

测量您没有将函数传递给

app.use()
在它需要函数的地方。在您的特定代码示例中,我假设这行代码是:

app.use(routes)

如果这是代码行,那么

routes
似乎不是一个函数。既然你是从这里得到的:

import routes from './routes.js'

那么,您显然没有从“./routes.js”导出函数,当我们查看它时,我们会看到以下内容:

export default { routes }

这表明您正在导出一个对象,而不是一个函数。您可以通过更改导入或导出来解决此问题。例如,您可以使导入和导出更加明确(不包装在对象中):

export routes

import { routes } from './routes.js'

因此它们匹配并为您提供您想要传递到的实际路由器

app.use()

© www.soinside.com 2019 - 2024. All rights reserved.