Meteor中的文件路径

时间:2015-12-06 09:24:43

标签: javascript node.js meteor

我无法识别公共目录c:\ TEMP \ todos \ .meteor \ local \ build \ programs \ server \ public \ main.py中文件的路径。 Meteor抱怨文件或目录不存在。已经搜索过有关类似问题的其他帖子(例如Reading files from a directory inside a meteor app),但没有帮助。

以下是错误消息。

=> Your application has errors. Waiting for file change.
=> Modified -- restarting.
=> Meteor server restarted
W20151206-04:05:57.893(-5)? (STDERR) Error inside the Async.runSync: ENOENT, no such file or directory 'c:\TEMP\todos\.meteor\local\build\programs\server\public'

客户端代码

Meteor.call('runPython', function(err, response) {
    if(err){

    } else {
        console.log(response);
    }
})

服务器代码

Meteor.startup( function (){
    Meteor.methods({
        runPython: function (){
            var PythonShell = Meteor.npmRequire('python-shell');
            var fs = Meteor.npmRequire('fs');

            var runPython = Async.runSync(function (done){
                var files = fs.readdirSync('./public/');

//   PythonShell.run('main.py', function ... was tried first but Meteor complained that "main.py doesn't exist". So below is a different attempt.

                var py = _(files).reject(function(fileName){
                    return fileName.indexOf('.py') <0;
                })

            PythonShell.run(py, function (err) {
// PythonShell.run(path.join(py,"main.py") ... was also tried but resulted in the same error
                if (err) throw err;
                    console.log('script running failed');
                });
        })

        return "Success";
    }
})
})

3 个答案:

答案 0 :(得分:0)

public文件夹中的所有文件都应使用'/'

阅读
var files = fs.readdirSync('/');

更多信息:http://docs.meteor.com/#/full/structuringyourapp

仅限服务器端(可能是您的情况,可能是更好的解决方案),您可以将所有内容放在private/文件夹下,然后使用资产API 访问它们:{{3 }}

答案 1 :(得分:0)

显然我是在思考它。我需要做的就是指定文件的完整路径。

PythonShell.run('c:\\project\\public\\main.py', function ...

答案 2 :(得分:0)

如果您的应用程序允许将Python脚本移至/private而不是/public,则可以利用Meteor的Assets

  

Assets允许Meteor应用程序中的服务器代码访问静态服务器资产,这些资产位于应用程序树的私有子目录中。资产不会作为源文件处理,而是直接复制到应用程序包中。

e.g。如果您将脚本移至/private/scripts/script.py,则可以通过Assets.absoluteFilePath('scripts/script.py')生成Meteor way的绝对路径。