如何在 Meteor 中将数据从客户端发送到服务器?

How to send data from client to server in Meteor?

我正在开发一个应用程序并且遇到了一个问题。我在“./public”文件夹中有 HTML 页面。在 './public/js' 中,我有一个脚本可以在填写此页面上的表格后收集一些数据。然后我需要将这些数据发送到服务器,服务器将使用这些数据进行一些计算。在该服务器应该发回数据之后,我可以将其显示在 HTML 结果页面上。我的想法是我需要对客户端隐藏此代码。

知道怎么做吗?

编辑:了解如何实现它。

在 server/main.js 中我有 WebApp.connectHandlers。我也使用 connect-route 包。所以我需要在 public/example.js 中创建 post xhr 并将值放入其中。 url 应该是 '/someurl' 和 router.get('/someurl', .....) 一样,对吧? 怎样才能正确完成?

这是我现在拥有的 server/main.js 中的一些代码:

    WebApp.connectHandlers.use(connectRoute(function (router) {
      router.get('/example', staticFile(process.cwd() + '/../web.browser/app' + 'example.html'))

问题是我从 example.html 中的表单中获取了一些值,.js 文件存储在 /public 中。然后我创建 xhr post 请求并指示 url 应该作为 server/main.js.

中 router.get() 中的第一个参数

/public/example.js 代码片段:

    const values = document.querySelector("input").value  //example of some data from form
    const xhr = new XHRHttpRequest()
    xhr.open('POST', '/someurl')
    xhr.send(values)

现在我需要在 server/main.js 中获取这个请求,但我不能在一个 router.get('/example',.....) 上使用两次 url。我的意思是它不会像这样工作:

    WebApp.connectHandlers.use(connectRoute(function (router) {
      router.get('/example', staticFile(process.cwd() + '/../web.browser/app' + 'example.html'))
      router.get('/example', (req, res, next) {...});

可能我对它的看法不正确,但还没有发现它是如何工作的。那我现在该怎么办?

https://docs.meteor.com/api/methods.html

Meteor.call("yourMethodName", (err, result) => {
  // Put your code to update HTML with result
});

如果您想使用 Meteor.call.

,将 html 放在 public 文件夹中也可能是个坏主意

我已经解决了这个问题并解决了它。在 server/main.js 我添加这段代码:

router.post('/method/example', (req, res, next) => {
    let data = '';
    req.on("data", chunk => {
      data += chunk;
    });
    req.on('end', () => {
      const result = dataHandler(data);
      res.write(`${result}`);
      res.end();
    });
}

并且在 /public/example.js 中,我刚刚使用与 server/mains.js 中新行相同的 URL 执行了一个 xhr post 请求。它是这样的:

const xhr = new XMLHttpRequest();
xhr.open('post', '/method/example');
xhr.send(data);
xhr.addEventListener("load", () => {
    const reqResult = xhr.responseText;
}