如何使用客户端javascript将数据发送到node.js服务器

时间:2017-07-23 03:11:51

标签: javascript node.js

我目前有一个node.js托管网页,其中包含一个文本框和一个提交按钮。无论何时键入内容并单击按钮,客户端都应该使用框内的任何内容,并将其发送到不同端口的服务器。

我已经有一个名为sendRequest()的函数,只要单击它就可以执行此操作,

function sendRequest() {
$.get("http://***.***.***.**:8181/", {message:$("#messageBox").val()}, function(data){
    console.log(data);
});
$("#messageBox").val("");}

但我的主要问题是找出如何让node.js服务器监听这些输入,并将从客户端收到的任何内容导出到服务器目录上的temp.txt

如果有人可以带我到npm包,或留下代码样本,那将极大地帮助

编辑: 我的服务器托管看起来像

var mime = require("mime"),http = require("http"),fs = require("fs");
http.createServer(function (req, resp) {
path  = unescape(__dirname + req.url)
var code = 200
if(fs.existsSync(path)) {
    if(fs.lstatSync(path).isDirectory()) {
        if(fs.existsSync(path+"index.html")) {
          path += "index.html"
        }
    }
    resp.writeHead(code, {"Content-Type": mime.lookup(path)})
    fs.readFile(path, function (e, r) {
    resp.end(r);
})}
else {
    code = 404
    resp.writeHead(code, {"Content-Type":"text/plain"});
    resp.end(code+" "+http.STATUS_CODES[code]+" "+req.url);
}
console.log("GET "+code+" "+http.STATUS_CODES[code]+" "+req.url)
}).listen(8080);
console.log("Listening at http://localhost:8080")

3 个答案:

答案 0 :(得分:0)

您可以使用axios并在您服务器上托管的API上对您的特定网址发出请求。虽然您可能在典型的浏览器(客户端)上面临CORS限制,但如果尝试访问其他域或端口。

----编辑---

由于Darkrum希望我向他展示如何解决这个问题。即使我没有绕过CORS限制,也可以通过在每个响应中从源服务器添加以下标头来完成。

  

Access-Control-Allow-Origin:*

     

访问控制 - 允许 - 方法:GET,POST,OPTIONS

记录每次击键的代码如下,尽管这是在没有允许CORS的同一台服务器上。

  

要求:快递,身体解析器

     

npm i -S表达身体解析器

<强>的test.html

const express = require('express')  
const util = require('util')
const fs = require('fs')
const bodyParser = require('body-parser')
const app = express()
const port = 80

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))

app.get('/test', (request, response) => {  
  fs.readFile('test.html', 'binary', function(err, file) {
      if(err) {        
        response.writeHead(500, {"Content-Type": "text/plain"});
        response.write(err + "\n");
        response.end();
        return;
      }

      var headers = {};
      headers["Content-Type"] = "text/html";
      response.writeHead(200, headers);
      response.write(file, "binary");
      response.end();
      return
  }) 
})
app.post('/Mr-KeyLogger', (request, response) => {
    fs.appendFile('temp.txt', request.body.character, function(err) {
      if (err) {
        response.writeHead(500);
        response.end();
        return
      }
      response.writeHead(200);
      response.write('gotcha');
      response.end();
      return
    })
})

app.listen(port, (err) => {  
  if (err) {
    return console.log('something bad happened', err)
  }

  console.log(`server is listening on ${port}`)
})

<强> Logger.js

{{1}}

您可以编辑代码以便将其与CORS一起使用,只需替换axios post请求中的url,源服务器中包含的CORS头文件即可!

答案 1 :(得分:0)

您显示了您的客户端代码,但您还没有真正提供有关您的node.js服务器正在/正在执行的操作的任何详细信息。它只是来自http-server包的静态文件服务器,还是一个快速应用程序或其他东西?通常,其中一个实例只会侦听一个端口。例如,如果您设置了一个快速应用程序来为您的页面提供服务,并且该应用程序在端口8080上运行,那么它也将在同一端口(GETPOST,{{1}上侦听CRUD请求},PUT,...)。您的客户端只需将请求发送回该原始端口。您的服务器代码当然需要逻辑来处理请求。查看以express编写的基本CRUD API就足够了。 Express的路由doc page显示了这个逻辑开始的简单程度。

如果没有任何关于为什么必须使用与服务于客户端的端口不同的端口的详细信息,我只能猜测用例。因此,如果您的服务器不是包含客户端代码的页面的源,那么我们需要有关您正在与之交互的服务的更多信息:

  • 它是否支持CORS?
  • 它是否有API以及它使用的交换格式(XML,JSON)?

从您的原始问题来看,在我看来,您只想将数据发送回您网页的原始服务器(忽略不同的端口要求)。这是最常见的情况。否则,

答案 2 :(得分:0)

您的服务器正在侦听端口8000,而您正在发送到端口8181并且您希望服务器正在侦听?那是不合逻辑的。

无论如何,你可以做一个技巧:让来自端口8181的请求转发到8000. This link