“[SyntaxError: Unexpected token <]”当我尝试使用我的 Node/Express 应用程序将文档添加到我的 Solr 索引时

Posted

技术标签:

【中文标题】“[SyntaxError: Unexpected token <]”当我尝试使用我的 Node/Express 应用程序将文档添加到我的 Solr 索引时【英文标题】:"[SyntaxError: Unexpected token <]" when I try to add documents to my Solr index with my Node/Express app 【发布时间】:2016-11-03 06:53:34 【问题描述】:

我正在尝试将 Solr 集成到 Node/Express 应用程序中,而我正在使用 this Node 包进行 Solr 集成。我能够正确查询索引,但是按照包的 GitHub 上的说明,我无法将文档添加到索引中。我不断收到此错误:

[SyntaxError: Unexpected token <]

在 Solr 控制台上,错误更详细一点:

SEVERE: Error processing "legacy" update command:com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character '[' (code 91) in prolog; expected '<'

这是我用来尝试使其正常工作的一个小型测试应用程序:

// set variables for environment
var express = require('express');
var path = require('path');
var solr = require('solr-client');

// Create the Express app
var app = express();
module.exports = app;

// Initialize the Vash view engine
app.set("views", path.join( __dirname, "/views") );
app.set("view engine", "vash");

// set routes
app.get('/', function(req, res) 
    // Create a client
    var client = solr.createClient();

    var query = 'q=fencing';
    client.get('select', query, function(err, obj) 
        if (err) 
            console.log(err);
         else 
            console.log(obj);
        
    );

    // Switch on "auto commit", by default `client.autoCommit = false`
    client.autoCommit = true;

    var docs = [];
    for(var i = 0; i <= 10 ; i++)
        var doc = 
            id : 12345 + i,
            title_t : "Title "+ i,
            description_t : "Text"+ i + "Alice"
        ;
        docs.push(doc);
    

    // Add documents
    client.add(docs,function(err,obj)
        if(err)
            console.log(err);
        else
            console.log(obj);
        
    );

    res.render('index');
);

// Set server port
app.listen(4000);
console.log('server is running on localhost:4000');

不起作用的特定部分是我尝试在此处将文档添加到索引的位置:

// Add documents
client.add(docs,function(err,obj)
    if(err)
        console.log(err);
    else
        console.log(obj);
    
);

我的直觉是,这与接收 JSON 时需要 XML 有关,但我终其一生都无法弄清楚如何发送 XML 或使 Solr 能够接受 JSON。有什么建议吗?

【问题讨论】:

你使用什么版本的 Solr? 【参考方案1】:

我看过一点 solr-node-client 的代码,我看到为了添加一个文档,他们使用了这个函数 Client.prototype.add 并且这个函数最终使用了这个处理程序

this.UPDATE_JSON_HANDLER = 
(versionUtils.version(this.options.solrVersion) >= versionUtils.Solr4_0) 
? 'update' : 'update/json';

这意味着如果您使用大于或等于 4 的 Solr 版本,那么在 Solrconfig.xml 文件中存在一个名为 update 的请求处理程序。

  <requestHandler name="/update" class="solr.UpdateRequestHandler">

  </requestHandler>

一个统一的更新请求处理程序支持 XML、CSV、JSON 和 javabin 更新请求,委托给适当的 ContentStreamLoader 基于 ContentStream 的 Content-Type。

看这里 https://cwiki.apache.org/confluence/display/solr/Uploading+Data+with+Index+Handlers#UploadingDatawithIndexHandlers-JSONFormattedIndexUpdates

Node 包中的代码发送 json,因此 Solr 将委托给适当的 ContentStreamLoader。这是Node包中的代码

'内容类型' : '应用程序/json; charset=utf-8',

如果你使用低于版本 4 的 Solr,那么在你的 solrconfig.xml 中你应该有一个这样的请求处理程序

<requestHandler name="/update/json" class="solr.JsonUpdateRequestHandler">
        <lst name="defaults">
         <str name="stream.contentType">application/json</str>
       </lst>
  </requestHandler> 

所以,长话短说,确保如果您使用 Solr >=4,那么在 solrconfig.xml 中您必须有一个更新请求处理程序

 <requestHandler name="/update" class="solr.UpdateRequestHandler">
      </requestHandler>

如果您使用 Solr

<requestHandler name="/update/json" class="solr.JsonUpdateRequestHandler">
            <lst name="defaults">
             <str name="stream.contentType">application/json</str>
           </lst>
      </requestHandler> 

希望对你有帮助

【讨论】:

我使用的 solr 版本小于 4。我尝试了那个请求处理程序,但出现错误。 “org.apache.solr.common.SolrException:加载类'solr.JsonUpdateRequestHandler'时出错” 您好,您必须导入相应的 jar。即在我的 solrconfig 文件中,我有类似的东西, 看看这个答案,如果还有问题告诉我***.com/questions/14827375/… 实际上,看起来至少部分问题是我没有将核心传递给 var client = solr.createClient();作为参数。我现在已经让它工作了,至少在测试环境中的更现代版本的 Solr 上。谢谢您的帮助。在实际应用程序上配置时,我可能仍然需要您的解决方案。【参考方案2】:

可能是由于缺少 CFX 库。 参考:http://cxf.apache.org/

【讨论】:

以上是关于“[SyntaxError: Unexpected token <]”当我尝试使用我的 Node/Express 应用程序将文档添加到我的 Solr 索引时的主要内容,如果未能解决你的问题,请参考以下文章

获取 MongoDB 错误 - SyntaxError: Unexpected token?

异步抛出 SyntaxError: Unexpected token (

尝试运行 ESLint 脚本时出现“SyntaxError: Unexpected token ”

Python_报错:SyntaxError: unexpected character after line continuation character

React JS Jest 导致“SyntaxError: Unexpected token ”。

Discord.js + Node.js: SyntaxError: Unexpected token ''