Javascript NodeJS Ajax请求正好工作了七次

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(

我目前正在学习JavaScript/NodeJS/electron,我想构建一个小型演示者应用程序来远程控制powerpoint演示文稿

我使用electron设置了一个服务器,如下所示:

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*/ });