NodeJS / CloudFoundry - 失败:应用程序上传无效:符号链接指向根文件夹之外

时间:2018-01-19 08:52:44

标签: node.js cloudfoundry

我在IBM上测试CloudFoundry并且正在运行NodeJS。

尝试cf push我的应用时遇到以下错误:

failed: The app upload is invalid: Symlink(s) point outside of root folder

在我的appllcation中,我有以下代码:

return res.sendFile(path.join(__dirname +'/tvshows/'+ guide +'.html'));

不使用path.join时,只需使用:

return res.sendFile(path.join('./tvshows/'+ guide +'.html'));

我得到了这个错误:

TypeError: path must be absolute or specify root to res.sendFile

怎么办?

我也试过像path.join((process.env.BUILD_DIR || __dirname),return res.sendFile('index.html', { root: path.join(__dirname, 'tvshows', guide) });这样的东西,但没有运气。

2 个答案:

答案 0 :(得分:2)

失败来自我的node_modules文件夹。 使用.cfignore添加node_modules/可解决此问题。

答案 1 :(得分:2)

您没有提及您正在使用的cf cli的版本,但我认为这是从版本6.34.0开始的预期行为。

  

push现在保留app文件中的相对符号链接。这使得使用npm链接更容易使用Node.js应用程序,但请注意,当它检测到指向app文件夹外部的符号链接时,它现在出错(例如,包含外部符号链接的node_modules文件夹)。

https://github.com/cloudfoundry/cli/releases/tag/v6.34.0

我认为你正在进入第二部分,"当它检测到指向app文件夹外的符号链接时的错误"。它与应用程序中的代码无关,而是在项目文件夹中的某个位置有一个符号链接,它引用了另一个不在项目根目录下的文件。

如果您使用的是类似unix的系统,则可以运行find . -type l来查找当前目录下的所有符号链接。然后你只需要确定哪一个指向项目根目录之外。

选项是删除该符号链接,将其指向项目根目录下的某些内容,或使用.cfignore忽略该文件(这是您最终要做的)。

希望有所帮助!