Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用node.js';s文件系统的功能来自浏览器_Javascript_Node.js - Fatal编程技术网

Javascript 使用node.js';s文件系统的功能来自浏览器

Javascript 使用node.js';s文件系统的功能来自浏览器,javascript,node.js,Javascript,Node.js,我想创建一个从服务器上删除文件的函数。我打算使用此功能将设置(即db文件)恢复到默认状态。我使用以下命令运行服务器: node server.js 我知道node.js,但我不知道如何在浏览器端使用它。我对这个问题做了一些浅显的解读,在我看来,由于安全原因,这种互动是不可能的。如何执行此操作?您不能在浏览器中使用节点的fs,使其直接影响服务器上的文件系统fs仅用于本地可用的文件系统。您将需要创建一个API或使用一些其他技术。正如其他答案所说,直接从客户端调用节点服务器的方法是不可能的,但是您可

我想创建一个从服务器上删除文件的函数。我打算使用此功能将设置(即db文件)恢复到默认状态。我使用以下命令运行服务器:

node server.js

我知道node.js,但我不知道如何在浏览器端使用它。我对这个问题做了一些浅显的解读,在我看来,由于安全原因,这种互动是不可能的。如何执行此操作?

您不能在浏览器中使用节点的
fs
,使其直接影响服务器上的文件系统
fs
仅用于本地可用的文件系统。您将需要创建一个API或使用一些其他技术。

正如其他答案所说,直接从客户端调用节点服务器的方法是不可能的,但是您可以通过从浏览器发送请求来间接地做到这一点。在Node.JS部分,您可以创建一个http服务器,客户端将调用它,然后服务器可以执行一个操作

但是,您应该记住,以这种方式删除文件可能很危险,您需要确保在服务器端,您只允许删除您真正想要删除的文件。例如,您可能只允许从特定目录删除文件(而不仅仅是任何文件)

有很多方法可以做到这一点。您可以在纯节点(类)中执行此操作,也可以使用一些额外的模块,例如(它可以帮助您仅使用几行代码创建http服务器)或(它可以帮助您创建客户端-服务器消息传递系统-也可以使用几行代码)

由于我熟悉jxm,我为您举了一个简单的例子:

server.js

var server = require('jxm');
var fs = require("fs");

server.setApplication("Hello World", "/", "STANDARD-KEY");
server.linkResource("/", ["./index.html", "text/html"]);

server.addJSMethod("removeFile", function (env, param) {;
  if (fs.existsSync(param)) {
    fs.unlinkSync(param);
    server.sendCallBack(env, "File Deleted: " + param);
  } else {
    server.sendCallBack(env, "File does not exist: " + param);
  }
});

server.start();
index.html

<!DOCTYPE html>
<html>
<head>
    <script src="/jx?ms=connect" type="text/javascript"></script>
</head>
<input type="button" id="btnRemove" value="Remove temp.txt file" disabled="disabled"/>
<script type="text/javascript">

    document.onjxready = function () {
        jxcore.Start(function (status) {
            var btn = document.getElementById('btnRemove');
            btn.disabled = "";
            btn.onclick = function () {
                jxcore.Call("removeFile", "temp.txt", function (ret) {
                    alert(ret);
                });
            };
        });
    };
</script>
</body>
</html>
现在,您可以启动服务器:

$ node server.js
之后,您可以转到浏览器()并单击该按钮


尽管jxm与Node.JS一起使用效果最好(它们都来自同一个团队),但它也与Node.JS一起使用(如上面的示例所示)。

感谢所有的回答和评论。他们帮我指明了正确的方向。我真正想要的是从客户端进行一个简单的API调用。以下是我使用express所做的:

var app = express();
var settingsapirouter = require('./../../settings/settingsapi');
app.use('/api/settings', settingsapirouter);
设置SAPI
中,我定义:

module.exports = function (...) 
{
    var router = express.Router();

    router.route('/restoredb')
        .post(function (request, response) {
              ...
              });
}
在客户端的JS中:

function restoreSettings()
{
    $.ajax({
        url: '/api/settings/restoredb',
        type: 'POST',
    })
    .done(function() {
        console.log("success");
    }); 
}

为什么不在node.js端创建一个API并从浏览器调用该API来完成工作呢?扩展到@Jayram,公开一个类似
deleteFile
的端点,并在该请求中删除该文件,您不应该在客户端执行此操作,它必须在服务器端。node.js是一个服务器。浏览器使用get或post命令与服务器通信。要执行某个操作,您需要在服务器中设计一条路由,该路由可以执行您想要的操作,然后从浏览器将该URL发送到服务器,并传递您需要的任何数据。服务器接收特定的URL,从URL解析出客户端要求执行的操作并执行操作。
function restoreSettings()
{
    $.ajax({
        url: '/api/settings/restoredb',
        type: 'POST',
    })
    .done(function() {
        console.log("success");
    }); 
}