Marklogic nodejs Api错误

时间:2015-11-10 10:58:34

标签: node.js marklogic

我有以下marklogic rest-api url:

http://marklogicserver:8060/v1/search?format=json&options=optionname&q=question

此网址会根据选项名称向我发送结果并对其进行格式化。一切都很好。

现在我需要使用Nodejs API执行相同的工作:

我使用querybuilder做同样的事情,但我的结果永远不会根据optionname格式化。

qb.optionsName = 'optionname';
//qb.search = {q: question};
db.documents.query(
    qb.where(qb.parsedFrom(‘question’))
    ).result( function(results) {
        results.forEach(function(document) {
        console.log(JSON.stringify(document,null,2));
        return document;
    });
    }).catch(function (error){
        console.log(error);
    });

虽然我确定optioname是正确的,但系统会返回以下错误消息:

[Error: query documents: response with invalid 400 status]
message: 'query documents: response with invalid 400 status',
statusCode: 400,
body:
 { errorResponse:
    { statusCode: 400,
      status: 'Bad Request',
      messageCode: 'REST-INVALIDPARAM',
      message: 'REST-INVALIDPARAM: (err:FOER0000) Invalid parameter: No configured options: optionname' } }

3 个答案:

答案 0 :(得分:2)

您没有将查询构建器传递给函数,而是将查询传递给它。尝试创建查询,然后附加optionsName属性,如下所示:

var query = qb.where(qb.parsedFrom(‘question’))
query.optionsName = 'optionname';
db.documents
    .query(query)
    .result( function(results) {
        results.forEach(function(document) {
            console.log(JSON.stringify(document,null,2));
            return document;
        });
    })
    .catch(function (error){
        console.log(error);
    });

答案 1 :(得分:2)

QueryBuilder完全在客户端中定义查询。这种方法为应用程序提供了动态构造查询的完全灵活性,并避免了维护持久查询选项的内容。

要使用服务器上保留的查询选项,您可以将组合查询定义为JavaScript对象,并标识该对象中的持久查询选项:

http://docs.marklogic.com/jsdoc/documents.html#toc14

但是,建议使用QueryBuilder替代方法。

希望澄清,

答案 2 :(得分:0)

marklogic的某个人给了我很好的语法:

我的查询。如果它可以帮助某人,那就是格式错误。

var query = qb.where();
    query.optionsName = 'optionsname';
    query.categories = ['none'];
    query.search = {
            'options':{
                'search-option':['unfiltered']
            },
        'qtext': 'q'
    };

    db.documents
        .query(query)
        .result( function(results) {
           console.log(JSON.stringify(results,null,2));
        })
        .catch(function (error) {
            console.log(error);
        });

}

非常感谢:)