【问题标题】:Number of requests until last reset上次重置前的请求数
【发布时间】:2019-05-31 07:25:07
【问题描述】:

我正在创建一个 API,我需要创建一个类似 api/v1/status 的路由,以查看服务器的状态并返回一个 json,其中包含由于 API 处于活动状态而执行的请求数,但我不知道如何使用 NodeJS 做到这一点,有什么帮助吗?

我有那个 statusRoutes.js:

src/routes/statusRoutes.js

// Initialize express router
let router = require('express').Router();

// Set default API response
router.get('/status', function (req, res) {
    //Here is the return number of requests
    res.json({
        status: 'API Its Working',
        message: 'Welcome to User-Register crafted with love!',
    });
});

module.exports = router

在我的 api 中,我有一些路线:

src/routes/userRoutes.js

const express = require('express')
const router = express.Router()

var userController = require('../controllers/userController')

// User routes
router.route('/users/')
    .get(userController.index)
    .post(userController.new);

router.route('/users/:user_id')
    .get(userController.view)
    .patch(userController.update)
    .put(userController.update)
    .delete(userController.delete)

// Export userRoute
module.exports = router

我的 index.js 就是这样配置的:

src/index.js

const express = require('express');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const expressValidator = require('express-validator');

const app = express();
const http = require('http').Server(app);

// Import routes
const statusRoutes = require("./routes/statusRoutes");
const userRoutes = require("./routes/userRoutes");

// Configure bodyparser to handle post requests
app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(bodyParser.json());
app.use(expressValidator());

const dbName = process.env.NODE_ENV === 'dev' ? 'database-test' : 'database';
// Connect to Mongoose and set connection variable
const url = `mongodb://${process.env.MONGO_INITDB_ROOT_USERNAME}:${process.env.MONGO_INITDB_ROOT_PASSWORD}@${dbName}:27017/?authMechanism=SCRAM-SHA-1&authSource=admin`;
mongoose.set('useCreateIndex', true);
mongoose.connect(url);

var db = mongoose.connection;
// Setup server port
var port = process.env.PORT || 8080;

app.use(function (req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Methods", 'GET,PUT,POST,DELETE,PATCH');
    res.header("Access-Control-Allow-Headers", "Content-Type");
    next();
});


// Send message for default URL
app.get('/', (req, res) => res.send('User-Register is Working!!'));

// Use Api routes in the App
app.use('/api/v1', statusRoutes);
app.use('/api/v1', userRoutes);

// Launch app to listen to specified port
app.listen(port, function () {
    console.log("Running User-Register on port " + port);
    app.emit('APP_STARTED');
});

module.exports = app

【问题讨论】:

  • 一种策略是创建一个中间件,将每个请求记录到您选择的数据库(我建议使用 influxdb),然后统计端点将从该数据库中检索。

标签: javascript node.js mongodb express mongoose


【解决方案1】:

您可以创建一个在每个路由之前运行的中间件:

var count = 0;
app.use('*', (req, res, next) => { count++; next(); });

很明显,count 会在服务器关闭或崩溃时重置,因此,您还可以考虑添加像数据库这样的永久存储。 Redis 等数据库在存储快速变化的数据方面非常出色。

而且,正如 Ryan 在 cmets 中指出的那样,这种方法不会扩展到多发。在这种情况下,唯一的选择是使用所有服务器通用的外部存储。

【讨论】:

  • 我同意需要一个中间件,尽管这不会跨多个服务器扩展。
猜你喜欢
  • 2021-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-10
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
相关资源
最近更新 更多