добавить json данных в запрос промежуточного ПО - PullRequest
0 голосов
/ 06 мая 2020

Я новичок в express и узле, я работаю над задачей, в которой я хочу добавить некоторые json данные в запрос промежуточного программного обеспечения, вот подход, которому я следую:

В моем промежуточном программном обеспечении я хотите добавить некоторые детали для запроса, такие как текущая дата и время, а затем извлечь URL-путь. Вот код, который я придумал:

var express = require('express');

var app = express();
module.exports = app.use('/some-url', function(req, res, next) {
     let logdetails = {
      id: "some-id",
      datetime: Date.now(),
      path: '/path-in-url'
    }
    req.logdetails= logdetails;
    next();
} );

Я использую module.exports, поэтому эта функция экспортируется. Но это дает ошибки. Также каков правильный способ доступа к URL-пути, например, если URL-адрес /users/john, тогда я хочу извлечь /john, и мое промежуточное ПО должно применяться только тогда, когда URL-адрес начинается с /users.

Ответы [ 4 ]

2 голосов
/ 06 мая 2020

Также каков правильный способ доступа к URL-пути, например, если URL-адрес / users / john, тогда я хочу извлечь / john

Если ваш URL-адрес запроса /users/john тогда req.path предоставит вам путь URL-адреса запроса, то есть /users/john. Чтобы извлечь john, вы можете использовать именованные параметры маршрута и определить свой маршрут как /users/:name. После использования параметра именованного маршрута в вашем маршруте, если URL-адрес вашего запроса /users/john, req.params.name предоставит вам параметр маршрута, то есть john. Для получения дополнительных сведений см. req.params в express docs

, и мое промежуточное ПО должно применяться только тогда, когда URL-адрес начинается с / users

следующее промежуточное ПО будет работать, только если путь запроса /users

app.use('/users', (req, res, next) => {
   ...
}
1 голос
/ 06 мая 2020

промежуточное ПО. js

module.exports = {
    handler: (req, res, next) => {
        const userName = req.params.name;

        // add payload to request

        next();
    }
}

приложение. js

middleware = require("middleware");

app.use('/users/:name', middleware.handler);

Что касается доступа к URL-адресу, вы можете получить доступ, используя request params, например

app.use('/users/:name', (req, res, next) => {
    const userName = req.params.name;

    // add payload to request

    next();
});

 1. Register your specific URL - `/users/:name`, where `:name` is dynamic params e.g *john*
 2. Grab params in the callback
1 голос
/ 06 мая 2020

req.originalUrl возвращает путь URL-адреса, как показано ниже

// GET /search?q=something
console.dir(req.originalUrl)
// => '/search?q=something'

source: https://expressjs.com/en/api.html

Аналогичным образом получите путь URL-адреса и разделите строку соответствующим образом и примените необходимое условие.

Здесь, если ваш исходный путь - / users / john, то

const result = "/users/john".split("/") 

приведет к ["", "users", "john"]

Проверьте, есть ли result[1]==="users" и напишите свое состояние в промежуточном программном обеспечении.

Вам не нужно экспортировать промежуточное программное обеспечение.

1 голос
/ 06 мая 2020

Если вам нужно промежуточное программное обеспечение, просто экспортируйте функцию промежуточного программного обеспечения. Не вся app.use часть. Я думаю, что app.use возвращает объект Express. И :param в вашем URL-адресе гарантирует, что вы можете получить доступ к этому параметру. Вы можете узнать больше о шаблонах путей здесь

промежуточное ПО. js

module.exports = function(req, res, next) {
     let logdetails = {
      id: "some-id",
      datetime: Date.now(),
      path: '/path-in-url'
    }
    req.logdetails= logdetails;
    next();
}

Другой ваш основной. js файл:

const express = require('express');
const app = express();
const middleWare = require('./middleware')

app.use('/users/:name', middleWare, (req, res)=>{
  //you can access logDetails
  // and the name
  const name = req.params.name;//This will be john for /users/john
  const logDetails = req.logdetails;
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...