- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这里Hapi Lab why Test failed when all the tests are passed为什么测试失败。
在这个新问题中,为什么我会得到 检测到以下泄漏:lr 即使代码中没有全局变量。
运行这个简单的测试
var Code = require('code');
var Lab = require('lab');
var lab = exports.lab = Lab.script();
var server = require('../../');
lab.experiment('Users', function () {
lab.test('create joi required', function (done) {
var options = {
method: 'POST',
url: '/api/users',
payload: {
lastname: 'Bedini',
username: 'whisher',
email: 'me@ilwebdifabio.it',
password: 'mysecret'
}
};
server.inject(options, function(response) {
var result = response.result;
Code.expect(response.statusCode).to.equal(422);
Code.expect(result.message).to.equal('child "firstname" fails because ["firstname" is required]');
done();
});
});
lab.test('create', function (done) {
var options = {
method: 'POST',
url: '/api/users',
payload:{
firstname: 'Fabio',
lastname: 'Bedini',
username: 'whisher',
email: 'me@ilwebdifabio.it',
password: 'mysecret'
}
};
server.inject(options, function(response) {
var token = response.result.token;
var payload = options.payload;
Code.expect(response.statusCode).to.equal(201);
done();
});
});
});
2 tests complete
Test duration: 363 ms
The following leaks were detected:lr
payload.passdword
payload.password
var Code = require('code');
var Lab = require('lab');
var lab = exports.lab = Lab.script();
var server = require('../../');
lab.experiment('Users', function () {
lab.test('create joi required', function (done) {
var options = {
method: 'POST',
url: '/api/users',
payload: {
lastname: 'Bedini',
username: 'whisher',
email: 'me@ilwebdifabio.it',
password: 'mysecret'
}
};
server.inject(options, function(response) {
var result = response.result;
Code.expect(response.statusCode).to.equal(422);
Code.expect(result.message).to.equal('child "firstname" fails because ["firstname" is required]');
done();
});
});
lab.test('create', function (done) {
var options = {
method: 'POST',
url: '/api/users',
payload:{
firstname: 'Fabio',
lastname: 'Bedini',
username: 'whisher',
email: 'me@ilwebdifabio.it',
passdword: 'mysecret'
}
};
server.inject(options, function(response) {
var token = response.result.token;
var payload = options.payload;
Code.expect(response.statusCode).to.equal(201);
done();
});
});
});
1 of 2 tests failed
Test duration: 73 ms
No global variable leaks detected
'use strict';
/**
* Module dependencies.
*/
var BcryptUtil = require('../utils/bcrypt');
var JwtUtil = require('../utils/jwt');
var Models = require('../models');
var ReplyUtil = require('../utils/reply');
var User = Models.users;
exports.create = function create(request, reply) {
var params = request.payload;
params.password = BcryptUtil.generateHash(params.password);
params.roles =JSON.stringify(['user']);
User
.create(params)
.then(function(user) {
var token = JwtUtil.getUserToken(user);
var redisClient = request.server.plugins['hapi-redis'].client;
redisClient.set('user_'+user.userId, token);
return reply(ReplyUtil.ok(token)).created('/api/users/' + user.userId);
})
.catch(function(err){
if(err instanceof Models.Sequelize.ValidationError){
return reply(ReplyUtil.badData(err,params));
}
return reply(ReplyUtil.badImplementation(err));
});
};
exports.findAll = function (request, reply) {
User
.findAll({
order: [['createdAt','DESC']],
attributes: ['userId', 'firstname', 'lastname', 'username', 'email']
})
.then(function(users) {
return reply(ReplyUtil.ok(users));
})
.catch(function(err){
return reply(ReplyUtil.badImplementation(err));
});
};
exports.findById = function (request, reply) {
var userId = request.params.userId;
User
.findById(
userId,
{
attributes: ['userId', 'firstname', 'lastname', 'username', 'email']
})
.then(function(user) {
if(!user){
return reply(ReplyUtil.notFound({userId:userId}));
}
return reply(ReplyUtil.ok(user));
})
.catch(function(err){
return reply(ReplyUtil.badImplementation(err));
});
};
exports.update = function (request, reply) {
var userId = request.params.userId;
var params =request.payload;
User
.update(params,{
where: {
userId: userId
}
})
.then(function(rows) {
var affectedRows = rows.pop();
if(!affectedRows){
return reply(ReplyUtil.notFound({userId:userId}));
}
return reply(ReplyUtil.ok(affectedRows));
})
.catch(function(err){
if(err instanceof Models.Sequelize.ValidationError){
return reply(ReplyUtil.badData(err,params));
}
return reply(ReplyUtil.badImplementation(err));
});
};
exports.destroy = function (request, reply) {
var userId = request.params.userId;
User
.destroy({
where: {
userId: userId
}
})
.then(function(rows) {
if(!rows){
return reply(ReplyUtil.notFound({userId:userId}));
}
return reply(ReplyUtil.ok(rows));
})
.catch(function(err){
return reply(ReplyUtil.badImplementation(err));
});
};
exports.signIn = function (request, reply) {
var params = request.payload;
User
.findOne({
where: {
email: params.email
}
})
.then(function(user) {
if(!user){
return reply(ReplyUtil.invalidPassword());
}
if(BcryptUtil.authenticate(params.password, user.password)){
var token = JwtUtil.getUserToken(user);
var redisClient = request.server.plugins['hapi-redis'].client;
redisClient.set('user_'+user.userId, token);
return reply(ReplyUtil.ok(token));
}
return reply(ReplyUtil.invalidPassword());
})
.catch(function(err){
return reply(ReplyUtil.badImplementation(err));
});
};
exports.logOut = function (request, reply) {
var userId = request.auth.credentials.jti;
var redisClient = request.server.plugins['hapi-redis'].client;
redisClient.del('user_'+userId);
return reply();
};
exports.methodNotAllowed = function (request, reply) {
return reply( ReplyUtil.methodNotAllowed() );
};
'use strict';
/**
* Module dependencies.
*/
var User = require('../controllers/users');
var Validator = require('../validations/users');
/**
* Resource configuration.
*/
var internals = {};
internals.resourcePath = '/users';
module.exports = function() {
return [
{
method: 'POST',
path: internals.resourcePath,
config : {
handler: User.create,
validate: Validator.create
}
},
{
method: 'GET',
path: internals.resourcePath,
config : {
handler : User.findAll,
auth: {
strategy: 'token',
scope: ['admin']
}
}
},
{
method: 'GET',
path: internals.resourcePath + '/{userId}',
config : {
handler : User.findById,
validate: Validator.findById,
auth: {
strategy: 'token',
scope: ['user']
}
}
},
{
method: 'PUT',
path: internals.resourcePath + '/{userId}',
config : {
handler: User.update,
validate: Validator.update,
auth: {
strategy: 'token',
scope: ['user']
}
}
},
{
method: 'DELETE',
path: internals.resourcePath + '/{userId}',
config : {
handler: User.destroy,
validate: Validator.destroy,
auth: {
strategy: 'token',
scope: ['user']
}
}
},
{
method: 'POST',
path: internals.resourcePath + '/signin',
config : {
handler: User.signIn,
validate: Validator.signIn
}
},
{
method: 'GET',
path: internals.resourcePath + '/logout',
config : {
handler : User.logOut,
auth: {
strategy: 'token',
scope: ['user']
}
}
},
{
method: '*',
path: internals.resourcePath + '/{somethingss*}',
config : {
handler: User.methodNotAllowed
}
}
];
}();
最佳答案
我不,我有点晚了,但以防万一其他人遇到这个问题。这是 bcrypt 的问题。我有一个类似的问题,每当我使用 bcrypt-nodejs 时,它都会给我 The following leaks were detected:lr, password
,但是当我更改为 reqular bycrypt 时,它没有泄漏。尝试更新您的 bycrypt 版本。
关于hapijs - Hapi Lab 检测到以下泄漏 :lr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31924718/
我正在查看 hapi 路由的一些身份验证配置选项。我了解范围的工作原理 - 您可以将路由的范围设置为 'admin'这意味着用户的凭据必须具有匹配的范围...但是 entity 的目的是什么? ? 以
我正在使用 lab 编写测试用例我想测试我的插件是否抛出异常。问题是,hapi 允许异常冒泡,同时还设置了对内部服务器错误 500 的响应,这导致我的测试失败。 我们可以测试这个响应 expect(r
在 express 中,我有这样的事情: router.get('/foo', middlewareFunction, function (req, res) { res.send('YoYo
此代码在版本 9.0.3 中不起作用: server.route({ method: 'GET', path: '/', handler: function() {
我在 Joi 验证方面遇到了一个问题(或者我认为是一个问题)。如果它作为请求正文的一部分传递,我正在尝试为不存在的键分配一个值。 例如: parameters: Joi.object().keys({
由于“Inert”插件现在必须单独加载。我想注册我的应用程序的路线。我有2个选择 1) 导出一个以“server”为参数的函数,并将代码编写为 module.exports = function(se
我应该如何使用 HapiJS 实现类似 PHP exec 的系统函数调用?用户提交一个需要在后台运行一段时间的处理作业。 我需要以某种方式向用户返回作业ID/ session ID,异步运行作业,允许
我有一个像这样的routes.js: server.route({ method: 'GET', path: '/marvel/universal/verify/{serial?}',
我执行一些循环时内存不足。我怀疑 HapiJS 正在某种受限模式下运行。 我的开发机器有 i7 和 8GB 内存,但在 Hapi 控制台中我从未看到 Hapi 使用超过 1GB。 如何确保 Hapi
我使用 Joi 库作为我的 CRA 项目的独立验证器,但在触发时 email()验证器我收到神秘错误 Uncaught Error: Built-in TLD list disabled 最佳答案 来
有没有办法访问全局注册的插件?我已阅读有关 hapi-sequelize 的内容,我想将其实现到我的 hapi 应用程序中。这是documentation 。它指出您可以使用以下代码全局访问它: va
所以我有 Hapi (v17.5.1),当我有我的插件数组时 [ { plugin: good, options: { reporters: { errorReporte
我觉得我缺少一些基本的东西,但我不知道如何在 HapiJS 中获得更好的控制台输出。 我正在编写一个 API,当出现错误时它会打印出来。 150516/063815.663, [response],
我对 Hapi 如何处理验证感到有点困惑,根据请求生命周期 ( http://hapijs.com/api#request-lifecycle ),参数/查询的验证仅在身份验证完成后发生。 这样做有意
我有一个返回结果的代码。通常,当我收到该结果时,我会将其发送给客户端,并在此过程中将其转换为纯 JSON 对象。 但现在我需要对该结果集进行一些操作,然后在数据库中进行另一次查找。 我不明白的是结果集
我目前正在使用 hapi,我遇到了一个问题,我似乎找不到任何解决方案或以前提到过。当我发送以下请求时,只有我的第一个查询参数在 request.query 对象中。 curl -H "Content-
我想验证一个字段并允许另一个字段而无需验证;通过示例只是为了验证:“名字”字段。在我的代码中,当我注释“有效载荷”时,hapi 允许我记录任何字段,当我取消注释“有效载荷”时,hapijs 不允许我记
我一直在研究 hapi.js 应用程序并具有以下架构: Database --Models --usermodel.js --anothermodel.js Routes --
有谁知道是什么意思? npm ERR! Test failed. See above for more details. 3 tests complete Test duration: 873 ms
在 hapi.js API 中,他们指定身份验证方案也可以将工件作为凭证对象的一部分返回。 究竟什么是身份验证工件,它们为什么有用?有没有一个很好的例子来说明为什么 hapi 团队将此作为其 API
我是一名优秀的程序员,十分优秀!