1 回答

TA貢獻(xiàn)1806條經(jīng)驗 獲得超8個贊
聽起來你有點混淆了你的技術(shù)。
讓我們先澄清幾個術(shù)語:
節(jié)點JS
是用于服務(wù)器端或后端代碼的JavaScript運行時。
運行
代碼執(zhí)行的環(huán)境,如NodeJS或 Web 瀏覽器。
服務(wù)器端
這是指在服務(wù)器上運行的代碼。可以是 PHP、Java、Python 等……如果您使用的是 Node,甚至可以是 JavaScript。
后端
當(dāng)人們說“后端”時,通常與“服務(wù)器端”的意思相同。
前端
在此上下文中,“前端”是指在 Web 瀏覽器中執(zhí)行的代碼。
阿賈克斯
一種 HTTP 請求樣式,瀏覽器可以使用它來發(fā)送和獲取數(shù)據(jù)而無需重新加載當(dāng)前頁面。
既然我們已經(jīng)解決了這個問題......
Node 是 JavaScript 的服務(wù)器端運行時,因此在瀏覽器中運行的 JS 代碼無法直接與 Node 代碼通信。
如果你想點擊瀏覽器中的一個按鈕并看到數(shù)據(jù)被寫入你的數(shù)據(jù)庫,你必須對你的后端正在監(jiān)聽的 url 進行 AJAX 調(diào)用(稱為端點或路由)。
從你的例子中解釋你的意圖有點困難,但我認(rèn)為你的意思是發(fā)送一個 POST 到http://192.168.1.8
. 因此,您需要在 Node 應(yīng)用程序中配置一個可以處理 AJAX 請求的路由,然后您可以從那里將數(shù)據(jù)寫入數(shù)據(jù)庫。
當(dāng)然,您還需要隨請求傳遞數(shù)據(jù)。它與您的調(diào)用中的選項參數(shù)一起傳遞$.ajax(/* ... */)
。
在高層次上,這就是我相信你正在努力實現(xiàn)的目標(biāo):
所以基本上你的應(yīng)用應(yīng)該至少有兩個文件:
index.html
這將包含您的按鈕以及從您的 Pi 獲取數(shù)據(jù)的 JS 代碼。這個“前端”JS 還必須向您的 Node 應(yīng)用程序發(fā)送 AJAX 請求。app.js
這將是您的 Node 應(yīng)用程序。它必須公開一個端點,您的前端代碼可以將數(shù)據(jù)發(fā)送到該端點。在該端點的函數(shù)內(nèi),您將負(fù)責(zé)將數(shù)據(jù)寫入數(shù)據(jù)庫。
有一個名為 Express 的庫可以幫助您創(chuàng)建端點。我建議遵循他們的入門指南:https ://expressjs.com/en/starter/installing.html
更新
我看到你用圖表更新了你的答案。我假設(shè)您的心智模型可能正是那樣,這就是您遇到困難的原因。
例如,當(dāng)用戶訪問諸如https://stackoverflow.com之類的 url 時,請求不會轉(zhuǎn)到 Web 瀏覽器。請求必須首先通過服務(wù)器。當(dāng)你使用 Node 時,你的應(yīng)用本質(zhì)上就是服務(wù)器,負(fù)責(zé)返回正確的響應(yīng)。
在您的情況下,響應(yīng)將是一個 HTML 文件,index.html
例如。
那index.html
就是網(wǎng)頁,它將包含您的“前端”JavaScript 代碼,它可以通過 HTTP 與您的 Raspberry Pi 服務(wù)器通信以獲取您正在談?wù)摰膱D像數(shù)據(jù)。
在瀏覽器中運行的 JavaScript 無法直接與 SQL 數(shù)據(jù)庫通信。所以你必須通過網(wǎng)絡(luò)向你的節(jié)點服務(wù)發(fā)送請求。在您的后端應(yīng)用程序中,您可以借助從 NPM 獲得的包將數(shù)據(jù)寫入 MySQL 數(shù)據(jù)庫。這是一個例子: https: //www.npmjs.com/package/mysql
更新 2
聽起來您更喜歡使用 PHP。您可以將 NodeJS 換成 PHP,而我的圖表仍將代表您希望在較高層次上實現(xiàn)的目標(biāo)。關(guān)鍵區(qū)別在于您不必弄清楚如何設(shè)置“路線”。
使用 PHP,您可以只擁有一個名為以下內(nèi)容的文件SaveMyData.php
:
<?php
// Get the body of the POST request
$data = file_get_contents('php://input');
// Decode the JSON string so you can work with it in PHP
$decodedData = json_decode($data);
// $decodedData is now an array of the data you sent from the browser
foreach($decodedData as $row) {
// write the row to your database here
}
然后“端點”(對您如何為您的應(yīng)用程序提供服務(wù)做出一些假設(shè))是公正的,http://localhost:8080/SaveMyData.php它成為您從瀏覽器傳遞給 AJAX 調(diào)用的 URL。
您的 AJAX 請求類似于:
function AddShoots() {
$.ajax({
method: "POST", // the post to your Pi I'm assuming?
dataType: "json",
url: "http://192.168.1.8",
success: function (data) {
$.ajax({
method: "POST", // this is going out to your PHP backend
dataType: "json",
url: "http://localhost:8080/SaveMyData.php",
data: data,
success: function (response) {
// do stuff with the response if you'd like
})
});
},
});
}
這里違反了大量“最佳實踐”,但出于學(xué)校作業(yè)的目的,這應(yīng)該讓你指出正確的方向。
- 1 回答
- 0 關(guān)注
- 228 瀏覽
添加回答
舉報