2016-03-16 14 views
0

Допустим, я посылаю к узлу сервера запрос, чтобы получить JS файл:Извлечение дополнительных параметров из запроса HTTP

<script src="/blabla.js" id="545234677"> 

и на моем Узла стороне:

app.get('/blabla.js', function(req, res, next) { 
console.log(req.params.id); //undefined 
res.setHeader('content-type', 'text/javascript'); 
res.render('blabla'); //default 


}); 

и, наконец, у меня есть это шаблон blabla.ejs файла:

var id = <%= id %> 

Теперь я пытаюсь получить этот идентификатор пункт, но он показывает неопределенным. Я использую Express и EJS, и как только я получу этот ID, я хочу манипулировать файлом EJS и отправить обратно JS-файл, который адаптируется в соответствии с ID, полученным от моего узла. Спасибо.

ответ

3

Способ сделать это, вероятно, будет, как это - в вашем HTML вы бы запросить файл JS так:

<script src="/blabla.js?id=545234677"> 

И тогда для экспресс вы могли бы сделать следующее:

app.get('/blabla.js', function(req, res, next) { 
    console.log(req.query.id); 
    res.setHeader('content-type', 'text/javascript'); 
    // Pass id into the renderer 
    res.render('blabla', {id: req.query.id}); //default 
}); 

Хотя рендеринг обычно используется для визуализации HTML. Вероятно, есть лучший способ сделать то, что вы хотите, более элегантным способом.

Примечание:req.params будет работать, но сделает код равным /blabla.js/545234677. См. documentation на req.params.

+0

Это работало по всему моему приложению после этого не загружалось. – user1938653

+0

Был ли произведен код ошибки? Трудно сказать без вашего всего кода - ничто не должно нарушать мой код. –

1

Как насчет изменения вашего сценария для

<script src="[filename][id].js"></script> 

EG: <script src="blabla123.js"></script>

, то вы можете сделать что-то с помощью регулярных выражений, как

app.get(/^\/([a-zA-z]*)([0-9]*).js/,function(req,res,next){ 
    var fileName = req.params['0'], 
     id = req.params['1']; 
    console.log(fileName); 
    console.log(id); 
    // Now since you have both fileName and id as you required, you can 
    // use it to dynamically serve the content 
    // if(file=='' && id==''){//logic} 
    // If you want static file Name, modify the regular expression accordingly 
}) 

Просто изменить регулярное выражение в приведенном выше примере, как в вашей потребности и ее выполнения. В настоящее время указанное выражение для регулярного выражения отсутствует для любого из

/.js 
/[numeric].js 
/[alphabet].js 
/[alphabet][numerals].js 

Надеюсь, это поможет.

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