NodeJS Можно ли выполнить несколько запросов sql на одной странице маршрутов? - PullRequest
1 голос
/ 22 апреля 2020

Я пытаюсь использовать NodeJS для извлечения данных из базы данных mysql. Мне нужно запустить несколько маршрутов, но возможно ли запустить эти маршруты в одном маршруте. js page? Я приложу свой код ниже, но он не работает, когда я ввожу маршрут в свой браузер ie localhost: 3000 / a, и я хочу иметь возможность иметь несколько таких, как localhost: 3000 / b и c и d?

Я пробовал разные маршруты и пути, но не могу заставить их работать, любая помощь приветствуется.

приложение. js

var express = require('express');
var path = require('path');
var bodyParser = require('body-parser');
var mysql= require('mysql');
var http = require('http');


var index = require('./routes/index');
var users = require('./routes/users');
var candidates = require('./routes/users')

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, 'public')));


//Database connection
app.use(function(req, res, next){
    global.connection = mysql.createConnection({
        host     : 'localhost',
        user     : 'root',
        database : 'irlelection2020'
    });
    connection.connect();
    next();
});

app.use('/api/parties', users);
app.use('/api/candidates', candidates);


module.exports = app;
var server = http.createServer(app);
server.listen(3000);
console.log("Server running on port 3000");

пользователи. js (маршруты. js )

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

/* GET candidates listing. */

router.get('/', function(req, res, next) {
    connection.query('SELECT * from parties', function (error, results, fields) {
        if(error){
            res.send(JSON.stringify({"status": 500, "error": error, "response": null})); 
            //If there is error, we send the error in the error section with 500 status
        } else {
            res.send(JSON.stringify({"status": 200, "error": null, "response": results}));
            //If there is no error, all is good and response is 200OK.
        }
    });
});

router.get('/', function(req, res, next) {
    connection.query('SELECT * from candidates', function (error, results, fields) {
        if(error){
            res.send(JSON.stringify({"status": 500, "error": error, "response": null})); 
            //If there is error, we send the error in the error section with 500 status
        } else {
            res.send(JSON.stringify({"status": 200, "error": null, "response": results}));
            //If there is no error, all is good and response is 200OK.
        }
    });
});




module.exports = router;

index. js

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

/* GET home page. */
router.get('/', function(req, res, next) {

        res.render('index', { title: 'Express' });
});

router.get('/candidates', function(req, res, next) {

    res.render('index', { title: 'Express' });
});


module.exports = router;

1 Ответ

0 голосов
/ 22 апреля 2020

Здесь происходит несколько вещей. Для следующего кода:

var users = require('./routes/users');
var candidates = require('./routes/users');

То, что вы называете эти разные переменные, не означает, что при объявлении маршрутов через:

app.use('/api/parties', users);
app.use('/api/candidates', candidates);

произойдет любое волшебство c * Обе конечные точки укажите на тот же файл и будет соответствовать первому маршруту, с которым они сталкиваются. В вашем файле users. js вы определяете два своих маршрута одинаковым образом:

router.get('/', function(req, res, next) {
// ...
router.get('/', function(req, res, next) {

Поэтому, когда вы посещаете /api/parties или /api/candidates, они всегда будут ударил ваш первый маршрут из этого файла. По сути, у вас есть два варианта:

  1. Создание двух отдельных файлов маршрутизации
  2. Изменение способа объявления ваших маршрутов

Для метода 1 единственное, что у вас есть для этого переместите код кандидатов из пользователей. js в новый файл, скажем кандидатов. js и измените это определение:

var candidates = require('./routes/candidates');

Для метода 2 вы можете сохранить их в одном файле, но вам придется изменить базовый маршрут в приложении. js на:

app.use('/api', users);

Затем в пользователях. js вы бы объявили маршруты следующим образом:

router.get('/parties', function(req, res) {
// ...
router.get('/candidates', function(req, res) {

Также вы хотите изменить действительные функции маршрута на function(req, res) вместо function(req, res, next). Вы также можете res.json сократить свой JSON ответ с:

res.send(JSON.stringify({"status": 200, "error": null, "response": results}));

до

res.json({"status": 200, "error": null, "response": results});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...