间歇性错误“此套接字已被另一方终止”
Intermittent error "This socket has been ended by the other party"
我正在连接到我的neo4j在docker容器上运行,当我试图尝试另一个连接/查询时,我得到一个错误。错误提示"此套接字已被另一方终止"。这是我的Dockerfile与打开的端口:
EXPOSE 7474 7473 7687
这是我的驱动程序工具:
var neo4j = require("neo4j-driver").v1,
config = require("../../config");
(function(module){
module.exports = function(){
config.neo4j.server = 'localhost';
return neo4j.driver("bolt://" + config.neo4j.server, neo4j.auth.basic(config.neo4j.user, config.neo4j.password));
}
}(module));
我对neo4j的查询方式:
(function(module){
var driver = require('../../../utils/neo4j-driver')(),
Q = require('q'),
logger = require('../../../utils/logger'),
BaseNeo4jModel = require('../../../utils/neo4j-model');
function userDBAuth(user){
var deferred = Q.defer();
var session = driver.session();
session
//.run( "MATCH (a:Person) RETURN a.name AS name, a.uuid as uuid" )
.run("MATCH (user:User {email:{email}})"
+ "RETURN user",
{ email: user.email})
.then(function (result) {
logger.debug('fetching results...');
if(result.records.length > 0){
var records = [];
result.records.forEach(function(record){
records.push(new BaseNeo4jModel(record));
});
done();
deferred.resolve(records);
} else {
deferred.reject({sucess: false, message: 'User not Found'});
}
}).catch( function(err) {
logger.error(err);
done();
deferred.reject(err.fields[0]);
});
return deferred.promise;
function done(){
session.close();
driver.close();
}
}
module.exports = userDBAuth;
}(module));
这是我的堆栈跟踪:
{"name":"auth-services","hostname":"MacBook-Pro-de-Vinicius.local","pid":16292,"level":50,"err":{"message":"This socket has been ended by the other party","name":"Error","stack":"Error: This socket has been ended by the other party
at TLSSocket.writeAfterFIN [as write] (net.js:286:12)
at NodeChannel.write (/Users/viniciussouza/Sites/WeddSocial/backend/weddsocial-auth/node_modules/neo4j-driver/lib/v1/internal/ch-node.js:285:20)
at Chunker.flush (/Users/viniciussouza/Sites/WeddSocial/backend/weddsocial-auth/node_modules/neo4j-driver/lib/v1/internal/chunking.js:114:18)
at Connection.sync (/Users/viniciussouza/Sites/WeddSocial/backend/weddsocial-auth/node_modules/neo4j-driver/lib/v1/internal/connector.js:487:21)
at Session.run (/Users/viniciussouza/Sites/WeddSocial/backend/weddsocial-auth/node_modules/neo4j-driver/lib/v1/session.js:89:20)
at userDBAuth (/Users/viniciussouza/Sites/WeddSocial/backend/weddsocial-auth/app/api/auth/services/userDBAuth.js:13:7)
at Object._auth [as auth] (/Users/viniciussouza/Sites/WeddSocial/backend/weddsocial-auth/app/api/auth/services/auth.js:9:3)
at Server.auth (/Users/viniciussouza/Sites/WeddSocial/backend/weddsocial-auth/app/api/auth/resources/auth.js:7:12)
at next (/Users/viniciussouza/Sites/WeddSocial/backend/weddsocial-auth/node_modules/restify/lib/server.js:906:30)
at f (/Users/viniciussouza/Sites/WeddSocial/backend/weddsocial-auth/node_modules/once/once.js:25:25)","code":"EPIPE"},"msg":"This socket has been ended by the other party","time":"2016-09-27T11:12:33.163Z","v":0}
我绝望了,请帮帮我!
只是一个建议-但看起来您的成功路径并不总是调用done()
方法,因此会话并不总是关闭并返回到池。
我建议你修改如下:
if(result.records.length > 0){
var records = [];
result.records.forEach(function(record){
records.push(new BaseNeo4jModel(record));
});
done();
deferred.resolve(records);
} else {
deferred.reject({sucess: false, message: 'User not Found'});
}
在else块中添加done()
调用:
if(result.records.length > 0){
var records = [];
result.records.forEach(function(record){
records.push(new BaseNeo4jModel(record));
});
done();
deferred.resolve(records);
} else {
done();
deferred.reject({sucess: false, message: 'User not Found'});
}
我们得到了同样的错误,并跟踪到我们的代码,我们有时在事务中的所有查询完成之前提交事务。
看一下你的代码,我建议这样做:
(function (module) {
var driver = require('../../../utils/neo4j-driver')(),
Q = require('q'),
logger = require('../../../utils/logger'),
BaseNeo4jModel = require('../../../utils/neo4j-model');
function userDBAuth(user) {
var session = driver.session();
return session
.run("MATCH (user:User {email:{email}}) RETURN user", {email: user.email})
.then(function (result) {
logger.debug('fetching results...');
if (result.records.length === 0) {
return Q.reject({success: false, message: 'User not Found'}); // will be caught by the .catch() below
}
var records = result.records.map(function(record) {
return new BaseNeo4jModel(record); // assume this is synchronous and doesn't return a promise
});
done();
return records;
})
.catch(function (err) {
logger.error(err);
done();
Q.reject(err.fields[0]); // return a rejected promise that can be caught by the caller of userDBAuth
});
function done() {
session.close();
driver.close();
}
}
module.exports = userDBAuth;
}(module));
不确定这将解决你的问题,因为你做的并不完全是我们所做的,只是一个基于我们发现的建议。
相关文章:
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 使用clickToggle并在单击另一个元素时关闭元素
- 使用javascript将动态表从一个html页面打印到另一个html页
- 如何在android中使用phonegap将文件从一个文件夹移动/复制到另一个文件夹
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 从Rally获取一个特定的标记,以便计算另一个字段中的值
- 无法从jquery Mobile导航栏重定向到另一个页面
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 无法在本地计算机中将画布另存为图像
- 字符串在将其传递给另一个活动Android JavaScript时读取Null
- 如何在鼠标悬停时在另一个图像上滑动图像.
- 导航到特定事件的另一个变量页面
- 正在传递JSONP标头's数据参数到另一个文件中的AJAX请求
- 从另一个 php 脚本终止一个脚本
- 当一个'他的意见取决于另一方
- 从另一个函数终止一个活动的javascript函数/循环
- 间歇性错误“此套接字已被另一方终止”