区分设备expressJS的请求

问题描述 投票:0回答:1

我正在使用一个简单的expressJS应用程序。

server = app.listen(config.port, () => {
    logger.info(`Listening to port ${config.port}`);
  });

我试图区分多个请求是来自同一设备还是来自不同设备。是否有一个唯一的ID,或者我可以从express中的

req
对象中获取什么?

我尝试检查用户代理和 IP 地址。但这些并不是该设备所独有的。

node.js express user-agent
1个回答
0
投票

您可以使用 node-machine-id 库来获取设备唯一 ID。

您可以将调用者机器 ID 提供给 REST API 调用的标头。 可以比较服务器的机器ID,比较是否相同。

如果相同,请从同一设备拨打电话。

如果不相同,请从其他设备调用。

演示 server.js 和 clinet.js

服务器.js

const express = require("express")
const cors = require("cors")
const machineId = require('node-machine-id')

const app = express()
app.use(cors())

PORT = 3000
const serverDeviceId = machineId.machineIdSync({original: true});

app.get("/data", async (request, response) => {

    console.log(`request :${JSON.stringify(request.headers, null, 4)}`)
    let isSaveDevice = false;
    if (request.headers?.deviceid == serverDeviceId) {
        isSaveDevice = true;
    }
    return response.send({
        data: 'test data',
        callFrom: (isSaveDevice)? 'Same device' : 'Different Device',
        callerDeviceId: request.headers?.deviceid,
        serverDeviceId: serverDeviceId
    })
})

// start express server
app.listen(PORT, () => {
    console.log(`Listening on :${PORT}`)
})

客户端.js

const axios = require('axios')
const machineId = require('node-machine-id');

const getData = async () => {
    try {
        const id = machineId.machineIdSync({original: true});
        const resp = await axios.get(
            url = 'http://localhost:3000/data',
            config = {
                headers : {'deviceid': `${id}`}
            }
        );
        console.log(JSON.stringify(resp.data, null, 4));
    } catch (err) {
        // Handle Error Here
        console.error(err);
    }
};

getData();

安装依赖项

npm install express cors node-machine-id axios

运行服务器

node server.js

运行客户端

node client.js

客户端结果

$ node client
{
    "data": "test data",
    "callFrom": "Same device",
    "callerDeviceId": "42543e29ccb7471bba0760b328d4a41f",
    "serverDeviceId": "42543e29ccb7471bba0760b328d4a41f"
}

服务器端结果

$ node server.js
Listening on :3000
request :{
    "accept": "application/json, text/plain, */*",
    "deviceid": "42543e29ccb7471bba0760b328d4a41f",
    "user-agent": "axios/1.4.0",
    "accept-encoding": "gzip, compress, deflate, br",
    "host": "localhost:3000",
    "connection": "keep-alive"
}
© www.soinside.com 2019 - 2024. All rights reserved.