服務器的搭建 Node.js
在此使用 express 搭建一個簡單的服務器,可以監聽 post 請求并回應,代碼如下
var express = require('express'); // 基于 Node.js 平臺的 web 應用開發框架
var bodyParser = require('body-parser'); // 一個解析 HTTP 請求體的中間件,使用這個模塊可以解析 JSON、Raw、文本、URL-encoded 格式的請求體
// 創建一個app對象,類似一個 web 應用
var app = express();
// 經過 bodyParser 的配置,在 req 請求對象添加屬性,依據添加的次序嘗試解析 req.body
// parse application/json
app.use(bodyParser.json({
limit: '2mb', // 傳輸數據的大小限制
}));
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({
limit: '2mb',
extended: true,
parameterLimit: 50000,
}));
// 跨域
app.all("*", function (req, res, next) {
// 允許跨域的域名,*代表允許任意域名跨域
res.header("Access-Control-Allow-Origin", "*");
// 允許的 header 類型
res.header("Access-Control-Allow-Headers", "*");
// 跨域允許的請求方式
res.header("Access-Control-Allow-Methods", "*");
// 如果沒有這段代碼,解決跨域就無效,一定要加上,注意true是字符串
// res.header("Access-Control-Allow-Credentials", "true");
// if (req.method.toLowerCase() == 'options')
// res.send(200); // 讓options嘗試請求快速結束
// else
// next();
next();
});
// 接受指定路徑的請求,指定回調函數
app.post('/', function (req, res) {
if (!req.body.myRequest1) {
// 應協商好通訊的內容
console.log('params error!');
return;
}
res.end(JSON.stringify({'myResponse': req.body.myRequest1 + req.body.myRequest1,}));
}
// 創建一個 web 服務器,監聽 8081 端口,當監聽成功時回調
var server = app.listen(8081, function () {
var port = server.address().port; // 端口
console.log(`應用實例,訪問地址為 ${port}`);
});
客戶端的通訊 Javascript
在此使用 fetch 來在 js 中以 json 格式與服務器建立通訊,代碼如下
var option = {
method: 'POST', // 使用 post 方法
headers: { // 設置請求頭
'Accept': 'application/json',
'Content-Type': 'application/json;charset=UTF-8',
'Access-Control-Allow-Origin': '*',
},
body: JSON.stringify({
myRequest1: '1', // 這樣在服務器經過 body-parser 的解析就可以直接以 req.body.myRequest1 的形式獲取該值
myRequest2: 2,
}),
};
// 訪問服務器地址并以 option 中的通訊方式發送請求
fetch('http://localhost:8081/', option).then(function (
res.json().then(myResponse => {
console.log(myResponse);
});
return;
});