【问题标题】:Express JS REST API with MySQL使用 MySQL 表达 JS REST API
【发布时间】:2019-03-20 11:25:13
【问题描述】:

我正在使用 Express.js 和 MySQL 进行练习。目前我有4个文件。错误是,

TypeError: areas.getAreas is not a function
    at Object.<anonymous> (/--/--/--/src/routes/userRoutes.js:4:13)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/--/--/--/src/app.js:10:20)
    at Module._compile (module.js:653:30)

但我确定我是在声明变量和函数,所以我不明白为什么会这样。

我试图在 userRoutes.js 文件中获取变量 areas 的值,但控制台只显示一个“{}”。我还尝试更改 areas.js 文件的函数的 sintaxis,将其写为函数而不是对象。

主文件是 app.js,它包含:

const express = require('express');
const app = express();
const morgan = require('morgan'); 
const bodyParser = require('body-parser');
const mysql = require('mysql');

const connection = require('/--/--/--/db/connection.js');
const userRoutes = require('/--/--/--/routes/userRoutes.js');

app.set('port', process.env.PORT || 3000);

app.use(morgan('dev'));
app.use(bodyParser.json()); 

connection(mysql);    
userRoutes(app);

app.listen(app.get('port'), ()=> {
    console.log('server on port 3000');
});

接下来的文件是:

connection.js

'use strict';

module.exports = function connection(mysql){
    mysql.createConnection({
        host: 'http://x.x.x.x',
        user: 'xxxxxxx',
        password: 'xxxxxxx',
        database: 'xxxxxxx'
    })
};

areas.js

'use strict';

let areasModel = {};
areasModel.getAreas = (callback) => {
    if(connection) {
        connection.query(
            "SELECT * FROM areas",
            (err, rows) => {
                if(err) {
                    throw err;
                }
                else {
                    callback(null, rows);
                }
            }
        );
    }
};

module.exports = areasModel;

userRoutes.js

'use strict';

const areas = require('../models/areas');

module.exports = function (app) {
    app.get("/", (req,res)=>{
        areas.getAreas((err, data) => {
            res.json([]);
        });
    });
}

【问题讨论】:

  • 你试过console.log(areas) in userRoutes.js吗?
  • 我在areas.js 中看到了connection 变量的用法,但似乎没有声明它。
  • 是的...,我试过了,但答案是“{}”。我想当应用程序收费时,userRouters.js 应该收费,area.js 也应该收费。调用userRouters(app)应该也可以执行area.js的内容吧?

标签: javascript mysql rest express


【解决方案1】:

尝试在areas.js 中导入connection.js, 可能是因为从不输入那个if 语句,返回未定义

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2019-05-30
    • 2016-01-31
    • 1970-01-01
    相关资源
    最近更新 更多