错误:Route.get() 需要回调函数,但在 Route 上获得了 [object Promise]

Error: Route.get() requires a callback function but got a [object Promise] at Route

提问人:Prabir Choudhury 提问时间:11/2/2022 更新时间:11/2/2022 访问量:35

问:

我的问题就像问题的标题一样。我正在尝试将我的节点 n express 应用程序中的问题隔离到单独的路由和控制器中,以保持主服务器 .js 文件的清洁。

我的项目结构如下

controller
|---------- controller.js
database
|---------- db.js
route
|---------- players.js
package.json
|
server.js

我的控制器.js是:

const {sql, poolPromise, config}=require('../database/db')
const msnodesqlv8=require('msnodesqlv8');


const getAllPlayers=async(req, res, next)=>
{
    try
    {
        sql.connect(config, function(err)
        {
            if(err)
            {
                console.log(err);
            }
            else
            {
                var request=new sql.Request();

                request.query("select * from players", function(err, recordset)
                {
                    if(err)
                    {
                        console.log("Error while querying: "+err)
                    }
                    else
                    {
                        res.send(recordset);
                    }
                });
            }
        });
        
    }
    catch(err)
    {
        res.status(400).send(error.message);
    }
}


module.exports={
    getAllPlayers
}

路由文件为:

const express=require('express');
const router=express.Router();
const playerControll=require('../controller/controller')

router.get('/players', playerControll.getAllPlayers());


module.exports={
    routes: router
}

我的主服务器.js文件为:

const express = require('express')

const bodyParser = require('body-parser')
const cors = require('cors')
const fs = require('fs')
const path = require('path')
const morgan = require('morgan')
const router=express.Router()
const app = express()
const {poolPromise, config, sql}=require('./database/db')
const playerRoutes=require('./route/players');

app.use(cors())

app.use(bodyParser.urlencoded({ extended: false }))

// parse application/json
app.use(bodyParser.json())

app.use('/api/v1', playerRoutes); <---- attaching to the route file

app.use(morgan('dev'))

app.use(router)

const port=3200;

app.listen(process.env.PORT || port , (err) => {
    if(err)
  console.log('Unable to start the server!')
  else
  console.log('Server started running on : ' + port)
  })

在运行我的应用程序并执行路由 localhost:3200/api/v1/players 时,我收到错误错误:Route.get() 需要回调函数,但在 Route 上获得了 [object Promise]

这指向哪里?哪个文件?你能引导我朝着正确的方向前进,并帮助我正确地排列关注控制器和事件,以便路由 /api/v1/players 正常工作并获取数据。需要这方面的帮助。我无法破译错误消息。哪个对象?在纠正代码方面需要帮助。我是节点和快递的完全新手,在大多数像这样的故障中,我都在海上。

谢谢

JavaScript 节点.js 快速 回调 nodejs-server

评论

0赞 Heiko Theißen 11/2/2022
在 之后不带括号使用,因为您在路由处注册中间件函数,而不是它计算到的 promise。router.get('/players', playerControll.getAllPlayers)getAllPlayers
0赞 Prabir Choudhury 11/2/2022
嘿,@HeikoThei森刚才做到了;出现错误:Router.use() 需要中间件函数,但在 Function 上有一个 Object。
0赞 Prabir Choudhury 11/2/2022
这个 -->抛出新的 TypeError('Router.use() 需要一个中间件函数,但得到了一个 ' + gettype(fn))
1赞 Heiko Theißen 11/2/2022
app.use('/api/v1', playerRoutes.routes)不。app.use('/api/v1', playerRoutes)
0赞 Prabir Choudhury 11/2/2022
是的!做诀窍!@HeikoThei ßen 非常感谢!!

答: 暂无答案