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

时间:2018-06-12 03:22:14

标签: javascript mysql node.js

我想将router.get()与来自sql查询的查询分开,但是当我将direct函数声明为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;
  

错误:Route.get()需要一个回调函数但得到一个[对象未定义]           在Route。(匿名函数)[as get](/home/antonio/achaiAPI/node_modules/express/lib/router/route.js:202:15)           在Function.proto。(匿名函数)[as get](/home/antonio/achaiAPI/node_modules/express/lib/router/index.js:510:19)           在对象。 (/home/antonio/achaiAPI/api/routes/user.js:11:8)           在Module._compile(internal / modules / cjs / loader.js:678:30)           在Object.Module._extensions..js(internal / modules / cjs / loader.js:689:10)           在Module.load(internal / modules / cjs / loader.js:589:32)           在tryModuleLoad(internal / modules / cjs / loader.js:528:12)           在Function.Module._load(internal / modules / cjs / loader.js:520:3)           在Module.require(internal / modules / cjs / loader.js:626:17)           at require(internal / modules / cjs / helpers.js:20:18)

2 个答案:

答案 0 :(得分: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;

你会用

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

当您的userQueries.js已将该功能分配给exports属性

module.exports.getAllUsers = function getAllUsers( ...

答案 1 :(得分:0)

getAllUsers已经是一个功能,所以你可以直接使用。 将router.get('/users',database.getAllUsers);更改为router.get('/users',database);。您还可以在userQueries.js文件

中返回一个对象