nodejs fs(filesystem)在本地工作但不在服务器

时间:2015-10-28 19:55:31

标签: node.js server local fs

我的脚本已经为我的服务器做好了准备,除了服务器上没有加载变量,因为看起来文件系统似乎没有在服务器上以相同的方式解释该路径(Ubuntu 14.04 x64 vmlinuz-3.13。 0-57-通用)。当我在OS X 10.11.1上本地测试我的服务器时,一切正常,但在服务器上找不到该文件。

var jsonHourlyFile = './data/jsonHourly.json';
console.log(jsonHourlyFile);
console.log(fs.existsSync(jsonHourlyFile));
if (fs.existsSync(jsonHourlyFile)) { //Why was this in the function in the first place...?
  console.log("loaded JsonHourlyFile")
  var jsonHourly = jsonfile.readFileSync(jsonHourlyFile);
} else {
  var jsonHourly = JSON;
  console.log("jsonHourlyFile not found!")
}

这在我的计算机上返回true,在服务器上返回false。我已经使用FileZilla将所有文件正确复制到服务器,并且可以确认它们在那里。

我怀疑它与文件路径有关。虽然我认为使用./将始终指向正确的地图。谁可以详细说明这个?

1 个答案:

答案 0 :(得分:1)

我必须评论你的最后一句:

  

"虽然我认为使用./将始终指向正确的地图。"

事实并非如此。 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" /> <nav class="navbar navbar-inverse navbar-static-top navbar-custom"> <div class="container-fluid"> <div class="navbar-header"> <a class="navbar-brand" href="#">Locket</a> <div class="navbar-upper"> <div class="btn-group"> <button type="button" class="btn navbar-btn btn-drop dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">{{currentUser}}</button> <ul class="dropdown-menu"> <li><a href="#">Action</a> </li> <li><a href="#">Another action</a> </li> <li><a href="#">Something else here</a> </li> <li role="separator" class="divider"></li> <li><a href="#">Separated link</a> </li> <li role="separator" class="divider"></li> <li ng-click="logout()"><a href="#">Log Out</a> </li> </ul> </div> </div> </div> </div> </nav> <div class="container"> <div class="row"> <div class="col-sm-12 friendListWindow"> <p class="windowTitle text-center">Friends List</p> <form class='form-control-inline' ng-submit='addFriend(newFriendUsername)' name='addFriendForm'> <div class='form-group'> <input autocomplete='off' class='form-control input-display' type='text' name='newFriendUsername' ng-model='newFriendUsername' required/> <button class='btn btn-default button-display form-control' type='submit' ng-disabled='!addFriendForm.$valid'><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> </button> </div> </form> <span ng-if='sentRequest' class="friendReqSent">{{friendReqMsg}}</span> <p class="friendHeaders">Friend Requests</p> <div class="friendRequests"> <ul class="friendList"> <li class="friendRequest" ng-repeat='friend in friendRequests track by $index'> <div class='form-control-inline'> <span>New friend request from: {{friend}}</span> <div class="friendRequestOptions"> <button class='btn btn-default friendButton'><span class='glyphicon glyphicon-ok vertical-center' aria-hidden='true' ng-click='acceptFriendRequest(friend)'></span> </button> <button class='btn btn-default friendButton'><span class='glyphicon glyphicon-remove vertical-center' aria-hidden='true' ng-click='ignoreFriendRequest(friend)'></span> </button> </div> </div> </li> </ul> <div class="acceptedfriendRequests"> <ul class="friendList"> <li class="friendRequest" ng-repeat='friend in acceptedfriendRequests track by $index'> <span>{{friend}} accepted your friend request</span> <button class='btn btn-default friendButton'><span class='glyphicon glyphicon-ok vertical-center' aria-hidden='true' ng-click='acknowledgeFriendRequest(friend)'></span> </button> </li> </ul> </div> </div> </div> </div> </div>的含义是&#34;在此目录&#34;中,即脚本执行的位置。

在本地计算机上,您说您的脚本在./中执行,这意味着您的JSON文件应位于/Users/me/WebstormProjects/WebTest中。我们知道这是真的,因为脚本适用于您的计算机。

现在,在服务器上,您说脚本在/Users/me/WebstormProjects/WebTest/data/中执行。因此,除非该特定目录中有一个/root/WebTest/bin文件夹,其中包含您的JSON文件(因此路径为data/),否则您的程序将无法按预期执行。

有很多方法可以解决这个问题,我无法分辨哪一个是最好的。您只需要确保本地计算机和服务器具有正确的文件路径,考虑到两个操作系统都不相同,这可能会有很大不同。

有关Wikipedia上路径的详情。