假设我向节点服务器发送了获取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进行自我调整。 谢谢。
答案 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}}
我希望这会有所帮助。