我正在尝试构建mvc模型API。我在查询时遇到麻烦。似乎我没有正确导出连接变量,原因是出现“ connection.query不是函数”错误。
我尝试使用exports.module导出它,但是因为我已经有要导出的路由器,所以出现了这个错误:TypeError('Router.use()需要中间件功能,但是得到了'+ gettype(fn)) TypeError:Router.use()需要一个中间件功能,但有一个对象
我也尝试使用以下语法导出:exports.connection = mysql.createConnection({...}),但是问题是connection.connect() 紧随其后的是,不再被识别,所以我不知道我是否连接良好
这是index.js:
var express = require('express');
var router = express.Router();
var mysql = require('mysql');
var indexController = require('../controllers/IndexController');
var booksController = require('../controllers/BooksController');
connection = mysql.createConnection({
debug:true,
host:'localhost',
user:'user',
password:'password',
database:'database'
});
connection.connect(function(error){
if(!!error){
console.log(error);
}else{
console.log('Connected!:)');
}
});
router.get('/', indexController.index);
router.get('/books', booksController.books);
module.exports = router;
这是booksController.js:
var BooksModel = require('../models/BooksModel');
exports.books = async function(req, res, next){
res.send(await BooksModel.getAllBooks(req, res))
}
这是booksModel.js:
var connection = require('../routes/index');
async function getAllBooks(req, res){
return await
connection.query("SELECT * FROM books", function (error,results, fields) {
if (error) throw error;
res.json(results);
});
});
}
module.exports={
getAllBooks
}
根据查询请求,我希望从数据库中获取数据。任何帮助将非常感激。谢谢!
答案 0 :(得分:0)
这是因为您的连接查询不在范围内。您将在index.js文件中返回路由器。
尝试将其设置在另一个类中:(想象一个带有connection.js文件的数据库文件夹)
// database/connection.js
module.exports = () => {
connection = mysql.createConnection({
debug:true,
host:'localhost',
user:'user',
password:'password',
database:'database'
});
connection.connect(function(error){
if(!!error){
console.log(error);
}else{
console.log('Connected!:)');
}
});
return connection;
}
然后在您的模型中
var getConnection = require('../database/connection');
async function getAllBooks(req, res){
return await
getConnection().query("SELECT * FROM books", function (error,results, fields) {
if (error) throw error;
res.json(results);
});
});
}
module.exports={
getAllBooks
}
答案 1 :(得分:0)
代替从index.js文件导出模块导出默认路由器 这是index.js
在最后一行替换代码
module.exports = {
router,
connection
};
现在在booksModel.js中,您可以使用它们
var { connection } = require('../routes/index');
在app.js / server.js / start.js中
var { router } = require('../routes/index');