所以在Play 2.0中我有这个:
GET /tasks/add controllers.Tasks.addTask(parentId: Option[Long] = None)
GET /tasks/:parentId/add controllers.Tasks.addTask(parentId: Option[Long])
Run Code Online (Sandbox Code Playgroud)
使用这样的控制器方法:
def addTask(parentId: Option[Long]) = Action {
Ok(views.html.addTask(taskForm, parentId))
}
Run Code Online (Sandbox Code Playgroud)
它工作正常.当我迁移到2.1时,它似乎抱怨这些行:No URL path binder found for type Option[Long]. Try to implement an implicit PathBindable for this type.基本上,我想要完成的是将路由tasks/add和路由tasks/123/add链接到接受的相同方法Optional[Long].知道怎么做吗?谢谢.
好吧,所以我得到了一种不是bug,它是Lighthouse上的一个功能响应:"我们删除了路径可绑定中的Option [Long]支持,因为它有一个可选的路径参数没有意义.你可以实现自己的路径可绑定,如果你愿意支持它." 到目前为止,我有2个解决方案,传递-1作为parentId,我不太喜欢.或者有两种不同的方法,在这种情况下可能更有意义.实现PathBindable现在似乎不太可行,所以我可能会坚持使用2种方法.
这里已经有一些关于node.js执行命令和输出数据的问题,但是我仍然无法解决这个问题.我想要的是使用node.js我想执行一个运行很长时间的python脚本并产生一些中间输出.我想在生成后立即将这些输出流式传输到客户端.我尝试过以下内容,但我得到的是,只有在命令完成后才能获得整个输出.如何让它实时将数据传递到套接字?谢谢.
function run_cmd(cmd, args) {
var spawn = require('child_process').spawn,
child = spawn(cmd, args);
return child;
}
io.sockets.on('connection', function (socket) {
var foo = new run_cmd('python', ['test.py']);
foo.stdout.setEncoding('utf-8');
foo.stdout.on('data', function(data) {
console.log('sending data');
io.sockets.emit('terminal', {output: data});;
});
);
Run Code Online (Sandbox Code Playgroud)