【发布时间】:2015-12-31 03:42:30
【问题描述】:
我正在尝试验证 JSON 对象是否正常。如果 JSON 正常,我有这个服务器应该能够返回 true,否则返回错误。 我正在使用 curl 发出这样的请求:
curl -D- -H 'Content-Type: application/json' -d '{"name":"user","pass":"uwish"}' 'http://localhost:8020/register'
在服务器脚本中,控制台日志调用 verifyJSON 并返回 false,但 JSON 对象没问题。
我想在解析时捕获错误(如果 JSON 不正确)并将其发送到客户端。我试图做到这一点,但我不确定我做了什么。
如果有人可以帮助我,我将不胜感激。感谢您的宝贵时间。
这是服务器代码:
var connect = require('connect');
var cors = require('cors');
var http = require('http');
var bodyParser = require('body-parser');
var corsOpts = { origin: '*' };
var app = connect();
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());
app.use(cors(corsOpts)).use(function (req, res, next) {
console.log(req.method);
console.log(req.url);
if(req.url === '/register' && req.method === 'POST')
register(req,res);
else
if(req.url === '/ranking' && req.method === 'GET')
ranking(req, res);
}).listen(8020);
console.log("Server running on 8020");
function register(req , res){
res.setHeader('Content-Type', 'application/json');
var somedata = {}; // return this object if JSON req is okay
console.log(req.body);
console.log(verifyJSON(req.body));
//trying to send the error to the client
if( err = verifyJSON(req.body) ){
somedata.error = err; // not sure if this is right
res.end(JSON.stringify(somedata));
}
else
console.log("do something with this JSON data");
}
function verifyJSON(str){
try {
JSON.parse(str);
} catch (e) {
return false;
}
return true;
}
【问题讨论】:
-
在一个稍微不相关的说明中,在生产中,您不应该将 JSON 发送到服务器只是以确定它是否有效格式化...
-
这不是它的目的。我只是想确保我收到的 JSON 数据是有效的,以便进一步使用它。 @LukePark
-
@snobis
JSON.parse:如果它解析,它是有效的 JSON(尽管它可能被完全伪造的数据填充)。如果它不解析(并抛出异常),则它是无效的。因为这是verifyJSON所做的,所以我不确定问题是什么......通常会使用数据,使得“验证”变得多余,因为它丢弃了解析的数据。 -
@snobis 在“无效”的情况下,没有
res.end,这可能是.. 有问题的。如果verifyJSON调用返回false,那么它不是有效的JSON - 那么从req.body读取的值是什么是? -
您可以尝试使用 JSON.parse(json_string) 和 try/catch 来验证您的 json 字符串。如果在 catch 中出错,那么它是无效的,否则是有效的 json 格式
标签: javascript json node.js curl express