当我将此函数添加到 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)
这个错误:
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()
。