我想在Meteor项目中使用RiveScript。不过我无法运行。我通过npm安装RiveScript,然后按照npm网站上的指南进行操作。

读取RiveScript模块并为其提供用户输入的文件。

var RiveScript = require("RiveScript");
var bot;

function loadingDone(files) {
    console.log("ok")
}

function loadingError(files, error) {
    console.log("error");
}

Meteor.startup(function () {
    bot = new RiveScript({utf8: true});
    bot.loadDirectory("brain", loadingDone, loadingError);
    bot.sortReplies();
});

Meteor.methods({
    'user-input': function (input) {
        return bot.reply("local-user", input);
    }
});


我收到此错误(在服务器上):


  (STDERR)用户本地用户所在的空主题为“随机”


bot.reply()函数的返回消息是:


  错误:未找到默认主题“随机”!

最佳答案

RiveScript的作者在这里。

代码中的一个问题是,在答复完成加载之后(在sortReplies()处理程序中),需要调用loadingDone函数。



var RiveScript = require("RiveScript");
var bot;

function loadingDone(files) {
    console.log("ok");
    bot.sortReplies();
}

function loadingError(files, error) {
    console.log("error");
}

Meteor.startup(function () {
    bot = new RiveScript({utf8: true});
    bot.loadDirectory("brain", loadingDone, loadingError);
});

Meteor.methods({
    'user-input': function (input) {
        return bot.reply("local-user", input);
    }
});





如果之后仍然遇到问题,请尝试确保RiveScript在Meteor初始化之前已完全加载了答复集。查看您的代码,这应该没问题,因为bot变量是全局变量,并且如果没有立即调用user-input处理程序,则该bot应该准备就绪。

另一件事是验证回复是否已全部加载;打开调试模式,看看它是否打印正在解析的RiveScript文件的内容;如果不是,则可能表示它是从错误的目录加载的,并且找不到要解析的*.rive文件。

关于node.js - 带 meteor 的RiveScript,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35959739/

10-09 22:25