我有一些带有一些路由的Express应用程序,其中只有两个需要支持会话.我到处读到中间件定义(app.use(express.session({...)仅适用于它之后的路由,所以我创建了这个示例:
var express = require('express');
var app = express();
app.use(express.bodyParser());
app.get('/path1', function (req, res) {
res.send('text response');
});
app.use(express.cookieParser());
app.use(express.session({
secret: 'secret',
cookie: { maxAge: new Date(Date.now() + 2 * 60 * 1000) }
}));
app.get('/path2', function (req, res) {
res.session.test = { "test": "test" };
res.send('text response');
});
app.listen(8088);
Run Code Online (Sandbox Code Playgroud)
但这不起作用:/ path2 res.session未定义.
如果我移动会话中间件定义 - 一切正常,但我看到在调用/ path1时正在创建会话(这是我想要避免的)
有人可以解释单个应用程序如何仅在某些路由中使用会话.
谢谢!
/////更新//////
经过多次挖掘 - 我想通了:
不要使用:app.use(express.session({ ... }));
相反 - 定义以下内容:
var sessionMiddleware = express.session({
//session configurations …Run Code Online (Sandbox Code Playgroud) 我正在使用请求模块向第 3 方 API 发送请求(GET 和 POST)。
我正在使用超时选项来限制响应的等待时间(不能等待太久)。
问题是有时会抛出以下异常:
错误:socket 在 createHangUpError (http.js:1476:15) at Socket.emit (events.js:117:20) at TCP.close (net.js) 的 Socket.socketCloseListener (http.js:1526:23) 挂断:465:12)
我猜这是因为请求被中止(由于超时)但套接字仍然打开并在 2 分钟后挂断。
问题是 - 当请求中止或如何捕获此异常并优雅地处理它时,我该怎么做才能关闭套接字。
这是我使用的相关代码:
var request = require('request'),
requestOptions = {
url: 'http://example.com/api',
timeout: 1000
};
request(requestOptions, function onResponse(error, response, body) {
if (error) {
//Trying to close the socket (to prevent socket hang up errors)
//**Doesn't help**
this.req.socket.destroy();
this.req.destroy();
return;
}
//Handle the response
});
Run Code Online (Sandbox Code Playgroud) 此问题仅在iOS 8中发生(确切地说是8.1).它不会在iOS 7中重现.
用例:在具有可滚动(长)内容的元素内滚动.
如果页面未放大 - 它按预期工作.
当您放大页面 - 它停止工作时,页面会滚动(就像您到达可滚动内容的末尾).效果是连续的:缩放越高 - 滚动内容的可能性越小.
测试页面:这里
打开iOS 8 Safari中的链接 - 看看列表元素是否可滚动.
现在放大页面并尝试滚动列表的内容 - 滚动页面而不是列表中的项目.我已经放置了红色标记,因此很容易看到页面滚动.
我尝试过不同的CSS规则甚至JS来阻止页面滚动(这仍然会使元素的内容滚动).
有没有人遇到过这种行为或有建议如何修复它?我真的不想用JS实现内容滚动.
禁用页面上的缩放(使用元视口)对我来说不是一个选项.