【问题标题】:how to run js file in mongo using springs如何使用springs在mongo中运行js文件
【发布时间】:2017-07-25 11:27:30
【问题描述】:

我使用下面的代码通过spring data在js中运行一个mongo脚本

ScriptOperations scriptOps = mongoOperation.scriptOps();

// Execute script directly
ExecutableMongoScript echoScript = new ExecutableMongoScript("function(x) { return x; }");
Object ob=scriptOps.execute(echoScript, "directly execute script");  
System.out.println(ob);

// Register script and call it later
scriptOps.register(new NamedMongoScript("runjs", "D:\\GSTR3\\gstr3b.1.a.js")); 
scriptOps.call("runjs", "execute script via name");

“echoScript”运行但“runjs”报错:

Caused by: com.mongodb.CommandFailureException: { "serverUsed" : "/10.144.113.138:27017" , "ok" : 0.0 , "errmsg" : "ReferenceError: runjs is not defined :\n_funcs1@:1:24\n" , "code" : 139 , "codeName" : "JSInterpreterFailure"}
at com.mongodb.CommandResult.getException(CommandResult.java:71)
at com.mongodb.CommandResult.throwOnError(CommandResult.java:110)
at com.mongodb.DB.eval(DB.java:358)
at org.springframework.data.mongodb.core.DefaultScriptOperations$2.doInDB(DefaultScriptOperations.java:119)
at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:446)
... 2 more

但是如果我通过 node.js 正常运行脚本,我会得到结果:

D:\GSTR3>node gstr3b.1.a.js
{ Gstin: '27AIXPT3280A1Z2',
  t_ival: 100003.78,
  t_iamt: 0,
  t_camt: 173520.1,
  t_samt: 173527.69999999998,
  t_itm_count: 33 }
D:\GSTR3>

【问题讨论】:

    标签: mongodb spring-data spring-data-mongodb mongotemplate


    【解决方案1】:

    scriptOps.register 接受 ExecutableMongoScript 作为参数,语法:scriptOps.register(ExecutableMongoScript arg0) 和 NamedMongoScript 接受两个参数,语法:NamedMongoScript(String name, ExecutableMongoScript script),它从不接受 JavaScript 的路径。

    所以,我们可以做的是将 .js 脚本作为 java 处理器运行,等待其完成并从其输入流中获取输出。

    try{
       String nodejsPath = "D:\\GSTR3\\gstr3b.1.a.js";
       String cmd = "node " + nodejsPath;
       Runtime run = Runtime.getRuntime();
       Process pr = run.exec(cmd);
       pr.waitFor();
       } catch (InterruptedException ex) {
                ex.printStackTrace();
       }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-21
      • 2016-01-03
      • 2016-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多