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