gpt4 book ai didi

javascript - 如何在浏览器中显示 Node.js REPL

转载 作者:行者123 更新时间:2023-11-30 13:53:23 24 4
gpt4 key购买 nike

我目前正在运行 Node.js repl 来评估代码,使用常规命令 repl.start const repl = Repl.start({ prompt });这将按预期启动控制台。我希望从我的浏览器向服务器发送代码以对其进行评估并将其显示回浏览器,但是没有找到任何文档可以这样做。这可能吗?

最佳答案

Is this possible at all?

是的,这也非常危险,因为脚本可能需要一些文件系统实用程序并开始复制、删除或读取浏览器无法通过 Web 服务器访问的文件。

话虽这么说,假设您知道自己在问什么,这是您如何实现类似目标的示例。

为简单起见,它使用套接字,但您可以使用 fetch 一次发送所有数据并接收输出结果。

package.json

{
"name": "browser-repl",
"main": "index.js",
"dependencies": {
"express": "^4.17.1",
"pocket.io": "^0.1.4"
}
}

index.html

<!doctype html>
<html>
<head>
<script src="/pocket.io/pocket.io.js"></script>
<script>
this.onload = () => {
const socket = io();
socket.on('eval', result => {
repl.value += result;
});
sender.addEventListener('click', () => {
const {value} = repl;
repl.value = '';
socket.emit('eval', value.trim() + '\n');
});
};
</script>
</head>
<body>
<textarea id="repl"></textarea>
<button id="sender">evaluate</button>
</body>
</html>

index.js

const repl = require('repl');
const app = require('express')();
const http = require('http').Server(app);
const io = require('pocket.io')(http);

app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});

io.on('connection', function(socket){
let connected = true;
const r = repl.start({
writer(data) {
if (connected)
socket.emit('eval', data);
return data;
}
});
socket.on('eval', function (input) {
r.input.emit('data', input);
});
socket.on('disconnect', function () {
connected = false;
r.input.emit('data', '.exit\n');
});
});

http.listen(3000, function(){
console.log('listening on *:3000');
});

您可以在包含 3 个文件的文件夹中 npm i,然后运行 ​​node .node index.js 并在之后转到 http://localhost:3000/ .

请随意在文本区域中输入 1+1 或您喜欢的任何其他内容,然后按 evaluate

这显然是关于如何开始的提示,因此您的问题应该以某种方式得到回答。

问候

关于javascript - 如何在浏览器中显示 Node.js REPL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57774987/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com