我想创建一个从服务器中删除文件的函数。我打算使用此功能将设置(即db文件)恢复到其默认状态。我使用以下命令运行我的服务器:
node server.js
我知道node.js' File System但我不知道如何在浏览器端使用它。我对这个问题做了一些简单的阅读,在我看来,由于安全原因,这种互动是不可能的。我该怎么做?
答案 0 :(得分:6)
您无法在浏览器中使用Node fs
,并直接影响服务器上的文件系统。 fs
仅适用于本地可用的文件系统。您需要创建API或使用其他技术。
答案 1 :(得分:1)
正如其他答案所说,直接从客户端调用节点服务器的方法是不可能的,但是间接地你可以通过从浏览器发送请求来实现。在Node.JS部分,您可以创建一个http服务器,客户端会调用它,然后服务器可以执行一个操作。
但是你应该记住,以这种方式删除文件可能很危险,你需要确保在服务器端,你只允许删除你真正想删除的内容。例如,您可以仅允许从特定目录中删除文件(不仅仅是任何文件!)。
有很多方法可以做到这一点。您可以在纯节点(http.Server类)中执行此操作,也可以使用一些额外的模块,例如express(它可以帮助您创建只有几行代码的http服务器)或jxm(它可以帮助您创建客户端 - 服务器消息传递系统 - 也只需几行代码)。
由于我熟悉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>
以下是如何运行它的方法。只需一次安装jxm模块:
$ npm install jxm
现在您可以启动服务器了:
$ node server.js
之后,您可以转到浏览器(http://localhost:8000/)并单击按钮。
尽管jxm最适合JXcore(它们都来自同一个团队),但它也适用于Node.JS(如上例所示)。
答案 2 :(得分:0)
感谢所有的答案和评论。他们帮助我指出正确的方向。我真正想要的是从客户端进行简单的API调用。这是我用快递做的事情:
var app = express();
var settingsapirouter = require('./../../settings/settingsapi');
app.use('/api/settings', settingsapirouter);
在settingsapi
中,我定义:
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");
});
}