这个问题在这里已经有答案了:
如何从异步调用返回响应(42个答案)
两年前关门了。
我目前正在使用node.js和express框架构建我的第一个api。有了这个api,我想从sql数据库中检索数据。我认为基础是正确的,比如http调用的路由、到数据库的连接和第一个sql测试调用。
我唯一的问题是..(类)之间的连接。。。控制器和..(类)。。它自己。我已经搜索(并找到)了很多好的例子和基本指南,但在这一部分的斗争。我会很快解释文件,并试图解释我的问题屁股尽可能清楚!
控制器负责:http路由
类负责对数据库的mysql调用
注:将有更多的控制器和类,使代码更易于管理
我现在的代码如下:
分类控制器.js
let express = require('express'),
router = express.Router();
Categorie = require('../models/categorie');
router.get('/categories' , (req, res) => {
console.log(" called but the result is: "+Categorie.getTest); //MARKB
res.json({ "test" : Categorie.getTest });
});
module.exports = router; //> imported by the main (node) app.js
分类.js
let connection = require('../connection/db');
function getTest() {
let answer = 0;
connection.connectDatabase.query('SELECT 1 + 1 AS solution', (err, rows, fields) => {
if (err){
throw err
};
answer = (rows[0].solution);
});
return answer;
}
module.exports = {
getTest: getTest()
};
我确信连接本身不是问题所在。因为在运行express app.js时,函数gettest()会运行并通过console.log显示结果。
但是当我调用…/api/categories时。我得到一个json响应:{“test”:0}
markb console.log也是如此
我很确定我调用gettest函数的方式是错误的。。。但我真的找不到替代方法,希望堆栈溢出的人能帮我。
app.js和db.js的代码可能不是原因,但如果它有帮助的话,这里是:
应用程序.js
const express = require('express');
let bodyParser = require('body-parser');
const http = require('http');
const app = express();
app.use(bodyParser.json());
// Setup header control
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
next();
})
// app.use('/db', require('./connection/db.js')); --> not necessary now
app.use('/api', require('./controllers/categoriesController'));
app.listen(8124, "127.0.0.1");
console.log("Express server listening on port 8124, 127.0.0.1");
数据库.js
let mysql = require('mysql');
let settings = require('../settings.json');
let db;
function connectDatabase() {
if (!db) {
db = mysql.createConnection(settings);
db.connect((err) => {
if(!err) {
console.log('Database is connected!');
} else {
console.log('Error connecting database!');
}
});
}
return db;
}
module.exports = {
connectDatabase: connectDatabase()
};
我真的希望有人能帮我。提前谢谢!!
1条答案
按热度按时间ahy6op9u1#
gettest是一个函数。通过categorie.gettest()调用