相关疑难解决方法(0)

安全地处理节点中的错误JSON.parse()

使用node/express - 我想从请求头中获取一些JSON,但我想安全地完成它.
如果由于某种原因它不是有效的JSON,它没关系,它只能返回false或者其他什么,它只会拒绝请求并继续前进.问题是,如果它不是有效的JSON,它会抛出语法错误.通常我希望语法错误爆炸,但在这种情况下不是.

var boom = JSON.parse(req.headers.myHeader);

我是否刮掉堆栈并检查来自该特定模块的错误解析调用,如果是这样,它会忽略它?这看起来有点疯狂.当然有更好的方法.

编辑:我知道try/catch块是一种处理此错误的方法,但它是节点应用程序中的最佳方式吗?这样会阻塞节点吗?

javascript json node.js express

27
推荐指数
2
解决办法
4万
查看次数

为什么节点更喜欢错误优先回调?

节点程序员通常使用这样的范例:

var callback = function(err, data) {
    if (err) { /* do something if there was an error */ }

    /* other logic here */

};
Run Code Online (Sandbox Code Playgroud)

为什么不简化函数只接受一个参数,即错误或响应?

var callback = function(data) {
    if (isError(data)) { /* do something if there was an error */ }

    /* other logic here */

};
Run Code Online (Sandbox Code Playgroud)

似乎更简单.我能看到的唯一缺点是函数不能将错误作为实际预期的返回值返回 - 但我相信这是一个非常微不足道的用例.

为什么错误优先模式被认为是标准的?

编辑:执行isError:

var isError = function(obj) {
    try { return obj instanceof Error; } catch(e) {}
    return false;
};
Run Code Online (Sandbox Code Playgroud)

另一种编辑:我的备用方法是否有可能比节点约定更方便,因为只接受一个参数的回调更可能是非回调用例的可重用方法?

callback node.js

13
推荐指数
2
解决办法
8565
查看次数

节点 js 请求 - 响应中的空体

我正在使用节点 js 请求从以下 URL 检索 HTML,但正文返回空。

var request = require("request");

var url = 'http://www.topshop.com/en/tsuk/product/bags-accessories-1702216/scarves-465/feather-wings-5884878?bi=0&ps=20';

request({
    uri: url
    }, function (error, response, body) {

        console.log(body);

        if (response.statusCode != '200') {
            console.log('fail');
            console.log(response.statusCode + ' # ' + error);
        } else {
            console.log(response.statusCode);
            console.log('############');
            console.log(response);
        }
    });
Run Code Online (Sandbox Code Playgroud)

仔细检查后,我可以在回复中看到这一点:

_header: 'GET /webapp/wcs/stores/servlet/CatalogNavigationSearchResultCmd?langId=-1&storeId=12556&catalogId=33057&beginIndex=1&viewAllFlag=false&pageSize=20&searchTermScope=3&searchTermOperator=LIKE&searchType=ALL&sort_field=Relevance&searchTerm=TS19M11KRED&x=25&y=11&geoip=search HTTP/1.1\r\nreferer: http://www.topshop.com/en/tsuk/product/bags-accessories-1702216/scarves-465/feather-wings-5884878?bi=0&ps=20&geoip=prod\r\nhost: www.topshop.com\r\nConnection: close\r\n\r\n',
_headers:
  { referer: 'http://www.topshop.com/en/tsuk/product/bags-accessories-1702216/scarves-465/feather-wings-5884878?bi=0&ps=20&geoip=prod',
    host: 'www.topshop.com' },
Run Code Online (Sandbox Code Playgroud)

我认为这意味着发生了重定向?即使它返回了 200 OK 而不是 302 重定向。

我不确定从重定向中检索正文的最佳方法?我是否需要对标头中的 URL 发出另一个请求?但是在这种情况下,响应代码不应该是 302 而不是 200 吗?

任何帮助表示赞赏。

request node.js

5
推荐指数
1
解决办法
5751
查看次数

标签 统计

node.js ×3

callback ×1

express ×1

javascript ×1

json ×1

request ×1