从HTTP请求中提取额外参数

时间:2016-03-16 14:43:36

标签: javascript node.js express parameters ejs

假设我向节点服务器发送了获取JS文件的请求:

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

并在我的Node端:

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 %>

现在,我正试图获得那个id,但它显示未定义。我正在使用Express和EJS,一旦我获得该ID,我想操纵一个EJS文件并发回一个JS文件,该文件根据我的节点应用程序收到的ID进行自我调整。 谢谢。

2 个答案:

答案 0 :(得分: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。请参阅req.params上的documentation

答案 1 :(得分:1)

如何将脚本更改为

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

EG: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

只需根据您的需要及其完成修改上述示例中的正则表达式。目前上述正则表达式匹配任何

{{1}}

我希望这会有所帮助。