我想在一些选定的元素之前放置一些SVG图像.我正在使用JQuery,但这是无关紧要的.我想将:before元素作为:
#mydiv:before {
content:"<svg.. code here</svg>";
display:block;
width:22px;
height:10px;
margin:10px 5px 0 10px;
}
Run Code Online (Sandbox Code Playgroud)
如果我如上所示,它只显示字符串.我检查了规格,似乎对内容有什么限制.是否有解决此限制的工作?只有内容css与我的问题相关.
有一些类似的问题,但我的问题是,如果我想传播我得到的不同路由中间件的中间结果,那么最好的方法是什么?
app.use(f1); app.use(f2); app.use(f3);
function f1(req,res,next) {
//some database queries are executed and I get results, say x1
res.locals.dbResults = {...};
next();
}
function f2(req,res,next) {
// more processing based upon req.locals.dbResults
res.locals.moreResults = {....};
next();
}
// ...
Run Code Online (Sandbox Code Playgroud)
我认为通过使用req .locals ,我可以通过不同的中间件获得相同的数据传播.此外,似乎请求和响应对象都在请求开始时将locals属性初始化为空对象.
另外,还可以设置res.mydata或req.mydata属性吗?
从理论上讲,app.locals也可用于通过不同的中间件传递这些数据,因为它将持续穿过中间件,但这与app.locals的传统使用相反.它更多地用于特定于应用程序的数据.还需要在请求 - 响应周期结束时清除该数据,以便相同的变量可用于下一个请求.
通过中间件传播中间结果的最佳和标准方法是什么?
我有一系列函数,如:
funcArray = [func1, func2, func3];
Run Code Online (Sandbox Code Playgroud)
在给定函数中,我想执行数组中的下一个函数.我该怎么做呢?这是我的基本骨架:
function func1() {
// I get current function caller
var currentFunc = func1.caller;
// I want to execute the next function. Happens to be func2 in the example.
}
Run Code Online (Sandbox Code Playgroud)
我不能使用indexOf函数,就像字符串或数字的数组一样.
注意:此问题似乎与此及其所指的类似.但是,这是一个不同的问题.
我想通过修改数组来改变处理顺序.这就是目标.可能会更有效的方法.
澄清:根据一些评论:funcArray是全球性的.
目标是在不使用任何第三方模块的情况下,以尽可能简单有效的方式为Node.js HTTP模块实现中间件.
我遇到了子进程模块的问题,特别是child.spawn和child.fork.我依赖于child_process.fork的文档,其中说:
这是用于生成Node.js进程的child_process.spawn()功能的特例.除了在普通的ChildProcess实例中具有所有方法之外,返回的对象还具有内置的通信通道.有关详细信息,请参阅child.send(message,[sendHandle]).
我在下面简化了我的问题:
parent.js是:
var cp = require('child_process');
var n = cp.fork('./child.js');
n.send({a:1});
//n.stdout.on('data',function (data) {console.log(data);});
n.on('message', function(m) {
console.log("Received object in parent:");
console.log( m);
});
Run Code Online (Sandbox Code Playgroud)
child.js是:
process.on('message', function(myObj) {
console.log('myObj received in child:');
console.log(myObj);
myObj.a="Changed value";
process.send(myObj);
});
process.stdout.write("Msg from child");
Run Code Online (Sandbox Code Playgroud)
正如所料.输出是:
Msg from child
myObj received in child:
{ a: 1 }
Received object in parent:
{ a: 'Changed value' }
Run Code Online (Sandbox Code Playgroud)
我希望它与parent.js中的注释行一起使用,取消注释.换句话说,我想在n.stdout.on(父进程中的'data'...语句)中捕获子进程中的stdout.如果我取消注释它,我会收到一个错误:
n.stdout.on('data',function (data) {console.log(data);});
^
TypeError: Cannot read property 'on' of null
Run Code Online (Sandbox Code Playgroud)
我不介意使用任何子进程异步变量,exec,fork或spawn.有什么建议?
我已经设置了一个带有Express中间件的节点服务器.在加载一个触发大约10个其他加载(js,css等)的HTML文件时,我在某些文件上随机获得ECONNABORTED错误.确切的错误是:
{ [Error: Request aborted] code: 'ECONNABORTED' }
Run Code Online (Sandbox Code Playgroud)
由此简化代码生成(在我尝试调试问题之后):
res.sendFile(res.locals.physicalUrl,function (err) {
if (err)
console.log(err);
...
}
Run Code Online (Sandbox Code Playgroud)
许多帖子都谈到了由于未指定完整路径名而导致的此错误.这不是这里的情况.我确实指定了完整路径,实际上错误是随机生成的.有时候页面及其所有后续链接都会完美加载,有时则不会.我试图刷新缓存,但没有找到任何模式来连接它.
此特定错误似乎是套接字连接中止的通用术语,并在其他应用程序(如FTP)的上下文中进行了讨论.
在意识到可以增加节点工作线程之后,我尝试使用以下方法:
process.env.UV_THREADPOOL_SIZE = 20;
Run Code Online (Sandbox Code Playgroud)
但是,我的理解是,即使没有这个,最多文件传输可能必须等待工作线程空闲而不会中止.我不是在谈论大文件,所有文件都不到1 MB.
我有一种直觉,认为这与节点直接无关.
请指出处理此错误的任何其他可能性(节点或其他).还有,其他任何间接解决方案?重试几次可能是一次,但那会很笨拙.编辑:不,我不能重试.标题已经发送错误!
侧面注意: 关于使用sendFile的许多示例都使用回调跳过,从而给人一种同步调用的印象.它不是.请始终使用回调,检查是否成功,然后转到"下一个"中间件,或者如果发送因任何原因失败,请采取适当的步骤.不这样做会使调试异步环境中的后果变得困难.
关于这个问题有一些帖子,但没有一个直接回答问题,正面.让我澄清一下,我理解(或者我认为)使用next(),next('route'),return next(),return以及它们对控制流的影响.我的应用程序的整个中间件包含一系列app.use,如:
app.use(f1);
app.use(f2);
app.use(f3);
app.use(f4);
...
Run Code Online (Sandbox Code Playgroud)
在每个中间件中,我都可以发送响应并完成,无需进一步处理.我的问题是我无法阻止处理进入下一个中间件.
我有一个笨拙的工作.我只是在发送响应后设置了res.locals.completed标志.在所有中间件中,一开始,我检查此标志并跳过中间件中的处理(如果设置了标志).在第一个中间件中,此标志未设置.
当然,必须有一个更好的解决方案,它是什么?我认为Express会隐式地通过一些特定于特定的方法来检查并跳过中间件吗?
我正在尝试使用 mediaRecorder API 录制媒体。这是我的代码(只是相关部分)。我希望在 saveChunks 中获得控制台日志,但似乎从未触发 ondataavailable 事件。我能够在视频元素中看到视频。
recordedChunks = [];
navigator.mediaDevices.getUserMedia({video:true, audio:true})
.then(function(stream) {
myVideoMedia = document.getElementById("vid1");
myVideoMedia.srcObject = stream;
myVideoMedia.onloadedmetadata = function(e) {
myVideoMedia.play();
mediaRecorder = new MediaRecorder(stream);
mediaRecorder.ondataavailable = saveChunks;
mediaRecorder.start();
console.log(mediaRecorder);
};
})
function saveChunks(event) {
console.log("Data recorded...");
//...
};
}
Run Code Online (Sandbox Code Playgroud)
mediaRecorder.state 的控制台日志是“正在录制” 我确实尝试通过将 1000 的时间片传递给 start() 并且它现在正在工作!如果没有传递时间片,则该函数在最后被调用一次。
据我所知,当您在node/express或其他任何内容中构建http响应时,该过程主要包括两个非连续的步骤:定义Headers和构造主体.标头包括Set-Cookie标头.在Express中,以下方法可用于设置标头的响应对象:
res.append(); // To append/create headers
res.cookie(); // A convenience method to append set-cookie headers.
Run Code Online (Sandbox Code Playgroud)
由于标头只是缓冲而在发送响应之前并未实际发送,是否有任何方法或机制可以获取当前标头集及其值,例如:
headers = res.getHeaders(); //Returns an object with headers and values
headers = res.getHeaders('Set-Cookie'); // To get only select headers
Run Code Online (Sandbox Code Playgroud) 官方文档在这里。
server.setTimeout 中没有提及服务下一个请求。所以我认为它独立于任何未来的请求或为第一个请求提供服务的时间?如果第一个请求比 server.setTimeout 需要更多时间来服务怎么办?
server.timeout 是套接字超时之前的不活动时间。它不区分传入数据的活动或发送传出数据。
server.keepAliveTimeout 再次指的是不活动,但指的是与传入数据有关的活动 - 服务器在完成写入最后一个响应后需要等待其他传入数据的时间。如果服务器在保持活动超时触发之前接收到新数据,它将重置常规的不活动超时,即 server.timeout。什么时候重置?在接收到新数据的第一个字节之后还是在最后一个字节之后?新数据是指新请求的数据吗?
server.timeout 与不活动有关(传入和传出数据)。server.keepAlive 仅指影响 server.timeout 重置的传入数据。
这些参数在 HTTP 2.0 中有何影响?
听起来让我很困惑。是否有更明确的解释记录在某处?或者有人可以更清楚地解释这一点吗?
编辑:我使用的是 8.x LTS 版本
我有一个复杂的基于Jquery-UI的对话框,我想提供一个SVG图像作为背景.我试图首先在一个简单的测试文件中完成这项工作,虽然SVG作为一个独立的图像工作正常但它不起作用.这是简化的代码:
<script>
$(document).ready(function () {
svg = "<svg width='400' height='400' fill='url(#grad1)' \
xmlns='http://www.w3.org/2000/svg'> <rect id='bkgrect' width='400' \
height='400' style='fill:'url(#grad1)'; stroke-width:3;'/> <defs>\
<linearGradient id='grad1' x1='0' y1='20%' x2='0%' y2='100%'> \
<stop id='stop1' offset='0%' stop-color='blue'/> <stop offset='100%' \
stop-color='white'/> </linearGradient> </defs> </svg>";
svgBase64 = btoa(svg);
bkgrndImg = "url('data:image/svg+xml;base64,"+ svgBase64 +"')";
$('#testDiv').css('background-image', bkgrndImg);
});
</script>
</head>
<body>
<div id='testDiv' style="border:2px solid red;width:400px;height:400px;
position:absolute;left:100px;top:100px;"> Some SVG Div </div>
<svg ... /svg>
Run Code Online (Sandbox Code Playgroud)
svg .../svg与后台使用的svg相同,显示正确.
在查看各种解决方案后,我主要依靠这篇文章.我还试图通过使用z-index模拟背景SVG图像并将Div中的图像定位为图像,但这不是一个好的修复.我想让SVG作为背景图像在浏览器中顺利运行,因为至少SVG渐变在所有现代浏览器中都得到了很好的支持,我认为SVG潜力得到充分实现的时间终于到来了.
node.js ×7
express ×4
javascript ×2
middleware ×2
svg ×2
css ×1
fork ×1
http ×1
http-headers ×1
jquery ×1
spawn ×1
webrtc ×1