2013-07-21 5 views
0

Я начинающий программист, работающий над веб-приложением. Поскольку у меня есть вещи прямо сейчас, есть маршрут для каждого отдельного запроса к моей базе данных. Я знаю, что должен быть способ использовать параметры маршрута, чтобы направить маршрут на выполнение правильной функции, но у меня возникают проблемы с реализацией.Консолидация маршрутов в Express.js

Вот что мои маршруты выглядеть прямо сейчас:

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

app.get('/query/type', database.type); 
app.get('/query/test', database.test); 
app.get('/query/another', database.another); 
app.get('/query/onemore', database.onemore); 

Каждый маршрут отображается в функции в файле database.js. Я хотел бы, чтобы попытаться сделать что-то в следующем формате, который будет обрабатывать запросы с одной строкой:

app.get('/query/:query', database.query) 

где он выполняет функции в зависимости от того называется параметром: запрос.

Есть ли простой способ реализовать это?

+0

Я не понимаю, зачем вам это нужно? Это очень плохой способ предоставления вашей базы данных конечному пользователю. У него есть проблемы с безопасностью. Пожалуйста, проверьте, нужно ли вам так. –

+0

Как я уже говорил, я новичок и действительно не знаю другого способа получения данных клиенту. Я был бы признателен, если бы вы указали мне в правильном направлении. Я использую углы на клиенте и базу данных диаграмм neo4j для самой базы данных. Файл базы данных содержит функции, которые обращаются к базе данных. Функции инициируют запросы cypher, некоторые из которых основаны на пользовательском вводе, а другие - нет. – bornytm

ответ

1

вы можете создать функцию, которая будет анализировать параметр и использовать ассоциативный массив для создания функции, которую вы хотите выполнить, и вызвать ее. см. код ниже.

function parseParam(req, res) { 
    var func = database[req.param('query')]; 
    func(req, res); 
} 

app.get('/query/:query', parseParam); 
+0

Спасибо большое, что сработало отлично! – bornytm

Смежные вопросы