Javascript NodeJS Ajax请求正好工作了七次
我目前正在学习JavaScript/NodeJS/electron,我想构建一个小型演示者应用程序来远程控制powerpoint演示文稿 我使用electron设置了一个服务器,如下所示:Javascript NodeJS Ajax请求正好工作了七次,javascript,node.js,ajax,electron,Javascript,Node.js,Ajax,Electron,我目前正在学习JavaScript/NodeJS/electron,我想构建一个小型演示者应用程序来远程控制powerpoint演示文稿 我使用electron设置了一个服务器,如下所示: const electron = require('electron'); const robot = require("robotjs"); const fs = require('fs'); const express = require('express'); const cors = require(
const electron = require('electron');
const robot = require("robotjs");
const fs = require('fs');
const express = require('express');
const cors = require('cors');
const {
app,
BrowserWindow
} = electron;
var mainWin = null;
var contentString;
app.on('ready', function() {
mainWin = new BrowserWindow({
width: 800,
height: 600
});
contentString = "";
// Remove Menu-Bar
mainWin.setMenu(null);
const port = 3000;
var app = express();
app.use(cors());
app.post('/remote/forward', function(request, response, next) {
var ip = getRemoteIP(request);
log(mainWin, "presenter - forward");
robot.keyTap("right");
});
app.post('/remote/backward', function(request, response, next) {
var ip = getRemoteIP(request);
log(mainWin, "presenter - backward");
robot.keyTap("left");
});
app.listen(port, function() {
log(mainWin, 'server listening on port ' + port);
});
});
function log(mainWin, text) {
contentString += getFormattedDate() + " " + text;
contentString += "<br />";
mainWin.loadURL("data:text/html;charset=utf-8," + encodeURI(contentString));
}
我确信这个解决方案是相当吝啬的,正如我所说的,我目前正在学习这个。我现在的问题是:这项工作的时间正好是七次。之后,我必须重新加载我的客户端浏览器。我怎样才能解决这个问题?另外,对于这些请求,有什么更好的解决方案?我希望只有一个app.post-method并使用给定的post参数。最后一个问题:什么是更好的日志记录方法?我希望将内容附加到窗口中,而不是每次都重新加载整个字符串
多谢各位 这是您的代码的缩小版本。试着看看它是否仍然只开火7次
/* Server side */
// instead of two app.post functions, use this one
app.get('/remote/:key', function(request, response, next) {
var ip = getRemoteIP(request);
log(mainWin, "presenter - " + request.params.key);
robot.keyTap(request.params.key);
response.send(request.params.key + ' key pressed');
});
/* Client Side */
function sendKey(key) {
return $.get('http://192.168.2.110:3000/remote/' + key)
}
// to send right key
sendKey('right').done(function(response) { /*success*/ }).fail(function(error) { /*error*/ });
为了简化,您不需要帖子,使用GET。还有,为什么要发送数据:{blob:..}?你可以通过观察来判断它的前进或后退url@Jag正如我所说的,我认为在这个任务中使用一个url并指定使用数据的类型会更好。但是你当然是对的,如果你希望每个函数有不同的URL。注意:我只是将请求更改为GET,这允许我每次只调用一次请求。。我刚从app.post改为app.get,并将类型设置为get。我还需要做些什么吗?谢谢!这只工作一次,之后,我必须重新加载页面。重新加载后,我在/*error*/-部分中创建的代码将执行两次。你知道可能有什么问题吗?编辑:没关系,我需要一个回应,就像你编辑的一样!非常感谢你!
/* Server side */
// instead of two app.post functions, use this one
app.get('/remote/:key', function(request, response, next) {
var ip = getRemoteIP(request);
log(mainWin, "presenter - " + request.params.key);
robot.keyTap(request.params.key);
response.send(request.params.key + ' key pressed');
});
/* Client Side */
function sendKey(key) {
return $.get('http://192.168.2.110:3000/remote/' + key)
}
// to send right key
sendKey('right').done(function(response) { /*success*/ }).fail(function(error) { /*error*/ });