开发者问题收集

错误:Route.get() 需要一个回调函数但是得到了 [object Undefined] NODE.JS + SQL

2018-06-12
707

我想将 router.get() 与 sql 查询中的查询分开,但是我遇到了这个错误,当我将直接函数声明为 router.get() 函数的参数时它可以工作。

User.js

const express = require('express');
const router = express.Router();

const database = require('../queries/userQueries');

router.get('/users',database.getAllUsers);

module.exports = router;

userQueries.js

function getAllUsers(req, res, next) {
    res.locals.connection.query('SELECT * from usuarios', 
    function (error, results, fields) {
        if (error){ 
            res.send(error); 
            return; 
        }
        res.send(results);
    });
};

module.exports = getAllUsers;

Error: Route.get() requires a callback function but got a [object Undefined] at Route.(anonymous function) [as get] (/home/antonio/achaiAPI/node_modules/express/lib/router/route.js:202:15) at Function.proto.(anonymous function) [as get] (/home/antonio/achaiAPI/node_modules/express/lib/router/index.js:510:19) at Object. (/home/antonio/achaiAPI/api/routes/user.js:11:8) at Module._compile (internal/modules/cjs/loader.js:678:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:689:10) at Module.load (internal/modules/cjs/loader.js:589:32) at tryModuleLoad (internal/modules/cjs/loader.js:528:12) at Function.Module._load (internal/modules/cjs/loader.js:520:3) at Module.require (internal/modules/cjs/loader.js:626:17) at require (internal/modules/cjs/helpers.js:20:18)

2个回答

您正在将函数 getAllUsers 本身分配给 module.exports ,而不是 module.exports 属性 。因此,当您使用 require 导入它时,它将解析为 所述函数 ,而不是以该函数为属性之一的对象。

尝试将导入的对象分配给表示该函数的变量名称:

const express = require('express');
const router = express.Router();

const getAllUsers = require('../queries/userQueries');

router.get('/users', getAllUsers);

module.exports = router;

当您的 userQueries.js 已将函数分配给 exports 属性 时,您将使用

const database = require('../queries/userQueries');
router.get('/users',database.getAllUsers);

module.exports.getAllUsers = function getAllUsers( ...
CertainPerformance
2018-06-12

getAllUsers 已经是一个函数,所以你可以直接使用。 将 router.get('/users',database.getAllUsers); 更改为 router.get('/users',database); 。你仍然可以在 userQueries.js 文件中返回一个对象

Papandadj
2018-06-12