如何在 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;
}
我正在开发一个应用程序并且遇到了一个问题。我在“./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;
}