Node.js - Joi 模式:检查 req.value & ip 不工作
Node.js - Joi schema: Check req.value & ip not working
我有这个 joi 模式来验证通过正文作为 json 发送的电子邮件和密码。另外我现在想检查ip地址。我试过如下,但我明白了:
{
"isJoi": true,
"name": "ValidationError",
"details": [
{
"message": "\"ip\" is required",
"path": [
"ip"
],
"type": "any.required",
"context": {
"key": "ip",
"label": "ip"
}
}
],
"_object": {
"email": "loremlipsum02@abc.at",
"password": "kyuser2923?"
}
}
这是我在 routehelpers.js
中的 joi 架构
const Joi = require('joi');
module.exports = {
validateSignup: (schema) => {
return (req, res, next) => {
const result = Joi.validate(req.body, schema);
if (result.error) {
return res.status(400).json(result.error);
}
if (!req.value) { req.value = {}; }
req.value['body']= result.value;
next();
}
},
schemas: {
signupSchema: Joi.object().keys({
email: Joi.string().email().required(),
password: Joi.string().required(),
ip: Joi.string().ip({
version: [
'ipv4',
'ipv6'
],
cidr: 'required'
}).required()
})
}
}
当我插入控制器时:
const curIP = req.ip;
console.log('IP: '+curIP);
我确实在控制台中获取了 ip:
Server running at http://127.0.0.1:4002/
IP: 127.0.0.1
但是我还可以如何验证请求注册的服务器的 ip?
我想这是因为它正在检查 req.value.body 中的所有内容。但是我需要如何更改 validateSignup: (schema) 来同时检查请求注册的 ip?
您似乎在尝试匹配 body
中的 ip
属性,而它是 req
对象的 属性。
尝试:
const result = Joi.validate(Object.assign(req.body, { ip: req.ip }), schema);
虽然我认为更好的方法是使用像 proxy-addr 这样的库。即使您的服务器在反向代理后面运行,这也会提取正确的客户端 IP。
我有这个 joi 模式来验证通过正文作为 json 发送的电子邮件和密码。另外我现在想检查ip地址。我试过如下,但我明白了:
{
"isJoi": true,
"name": "ValidationError",
"details": [
{
"message": "\"ip\" is required",
"path": [
"ip"
],
"type": "any.required",
"context": {
"key": "ip",
"label": "ip"
}
}
],
"_object": {
"email": "loremlipsum02@abc.at",
"password": "kyuser2923?"
}
}
这是我在 routehelpers.js
中的 joi 架构const Joi = require('joi');
module.exports = {
validateSignup: (schema) => {
return (req, res, next) => {
const result = Joi.validate(req.body, schema);
if (result.error) {
return res.status(400).json(result.error);
}
if (!req.value) { req.value = {}; }
req.value['body']= result.value;
next();
}
},
schemas: {
signupSchema: Joi.object().keys({
email: Joi.string().email().required(),
password: Joi.string().required(),
ip: Joi.string().ip({
version: [
'ipv4',
'ipv6'
],
cidr: 'required'
}).required()
})
}
}
当我插入控制器时:
const curIP = req.ip;
console.log('IP: '+curIP);
我确实在控制台中获取了 ip:
Server running at http://127.0.0.1:4002/
IP: 127.0.0.1
但是我还可以如何验证请求注册的服务器的 ip?
我想这是因为它正在检查 req.value.body 中的所有内容。但是我需要如何更改 validateSignup: (schema) 来同时检查请求注册的 ip?
您似乎在尝试匹配 body
中的 ip
属性,而它是 req
对象的 属性。
尝试:
const result = Joi.validate(Object.assign(req.body, { ip: req.ip }), schema);
虽然我认为更好的方法是使用像 proxy-addr 这样的库。即使您的服务器在反向代理后面运行,这也会提取正确的客户端 IP。