Node.jsを初めて使用しています。Nodeサーバーのスロットル(Express/jQuery)へのAJAXリクエストの繰り返し
jQueryを使用してローカルノードサーバー(データは関係ありません)に簡単なAJAX GETリクエストを実行するボタンを持つクライアントWebページがあります。これは、すべてのリクエストのカウンタの値がapp.get()
です。コンソールに記録されているので、どれくらいのリクエストが成功したかを知ることができます。
たとえば、ボタンをクリックすると、1秒に1回、コンソールにカウンタが表示されます。しかし、私がを繰り返してをクリックすると(1秒間に4〜5回)、サーバーはログを記録し、コンソールのカウンタを後で、通常はクリック数に応じて数分間表示します。それは要求を絞っている。
実際の制作の面では、私が意図している実際のアプリはそういうAJAXリクエストを「乱用する」とは考えられませんが、これは問題ではないと私は期待していましたが、ユーザはボタンを乱用しない。
問題を再現するMWEがあります。
server.js
const express = require('express');
const MongoClient = require('mongodb').MongoClient
//const bodyParser= require('body-parser');
const app = express();
//app.use(bodyParser.urlencoded({extended: true}));
//app.use(express.static(__dirname + '/public'));
app.set('view engine', 'ejs');
var db;
var clientURL = 'mongodb://127.0.0.1:27017/mydatabase'
var clientPort = 3000
MongoClient.connect(clientURL, (err, database) => {
if (err) return console.log(err)
db = database
app.listen(clientPort,() => {
console.log('Listening on '+clientPort)
})
})
app.get('/', (req, res) => {
res.render('client.ejs')
})
})
var c = 0; // counter
app.get('/mydatabase/endpoint', (req, res) => {
c = c + 1
console.log(c)
})
scripts.js
$(document).ready(function(){
$(".button").on("click", function(){
// AJAX GET
$.ajax({
url: "mydatabase/endpoint",
type: "get",
data: "..." // not imporant
})
});
})
クライアント.button
クラスを持っているbutton
要素を持つ単純なHTMLページです。
PCスペック:Windows 7 Professional 32ビット、Intel Core 2 Quad CPU Q6600 2.40GHz、4GB RAM(これは本当に古いシステムです。)
質問はなぜそのようなスロットルのようなものですか?それは:a)私のマシン、b)貧弱なロジックのアプローチ、またはc)ExpressまたはNode.jsと関係があるでしょうか?私は、Apache/PHPでこれが起こっていることを覚えていません。
申し訳ありませんが、あなたの説明は絶対的な意味を持ちます。単純な文字列をクライアント/ブラウザに返信することで問題は解決しました。しかし、私は 'c'を送ることができませんでした。アプリケーションがクラッシュしたため、私は500のステータスを取得しました。 – absay
@absay - OK、文字列を送信するように私の答えを変更しました。これがあなたの質問に答える(それはそうであると思われる)場合は、答えの左側にある緑色のチェックマークをクリックしたことを示すことができます。 – jfriend00