Промежуточное программное обеспечение Node (Express) - как правильно привязать различные конечные точки - PullRequest
0 голосов
/ 03 сентября 2018

Я начинаю копаться в Express, и у них есть эта функция промежуточного программного обеспечения, которую я сейчас изучаю.

Итак, скажем, у меня есть 2 конечные точки (/middlewaredemoa, /middlewaredemob), они обе требуют некоторого различного начального лечения. Затем у них есть общее промежуточное программное обеспечение, применяемое к одному и тому же лечению независимо от начальной конечной точки.

Где я не уверен, что делаю это правильно, когда передаю ответ с помощью GET (). Мне кажется, что, если у меня есть 2 разные конечные точки, каждый из них нуждается в своих app.get("/middlewaredemoa", ...). Это обязательно так? Допустим, я просто применяю некоторую обработку к переменной, тогда мне нужно вернуть эту переменную в каком бы состоянии она ни заканчивалась, лучше ли мне определять 1 get () для конечной точки?

let response = ""
app.use('/middlewaredemoa', (req, resp, next) => {
    response = "Greetings from: M1a"

    if ( Math.floor((Math.random() * 10) + 1) >=4){
        console.log("M1a gets req and passes it on to two")
        next()
    } else {
        throw "ARRRRRRRRRRRRRGGGGHHHHHH!"
    }
})

app.use('/middlewaredemob', (req, resp, next) => {
    response = "Greetings from: M1b"

    if ( Math.floor((Math.random() * 10) + 1) >=4){
        console.log("M1b gets req and passes it on to two")
        next()
    } else {
        throw "ARRRRRRRRRRRRRGGGGHHHHHH!"
    }
})

//some common treatment for all the above endpoints
app.use((req, resp, next) => {
    response += " and M2"

    if ( Math.floor((Math.random() * 10) + 1) >=4){
        console.log("M2 gets req and passes it on to GET()")
        next()
    } else {
        throw "ARRRRRRRRRRRRRGGGGHHHHHH!"
    }
})

//get - need 1 get per endpoint?
app.get("/middlewaredemoa",(req,resp) => {
    console.log("GET() handler after the middlewares")
    resp.send(response + " and GET() 1")
})
app.get("/middlewaredemob",(req,resp) => {
    console.log("GET() handler after the middlewares")
    resp.send(response + " and GET() 2")
})

/*ERROR HANDLING - could use same pattern as above to chain errors*/

app.use((err, req, resp, next) => {
    console.log("CRASH BOOM UH!:"+err)
    resp.status(500).send("Poop hit the fan HARD")
})

1 Ответ

0 голосов
/ 03 сентября 2018

Express предлагает способ использовать массивы для сопоставления нескольких маршрутов.

Как это:

req.get(['/routea', '/routeb'], (req, res, next) => {
 // do something
 // res.send() if you want to send a response right away
 // next() if you want to go to the next middleware
});

req.get - это просто промежуточное ПО, похожее на req.use, за исключением того, что оно соответствует только req.method === 'GET'

РЕДАКТИРОВАТЬ: для бонусных вопросов в комментариях. Это просто промежуточное ПО. Используйте те же методы масштабирования, что и для обычного промежуточного программного обеспечения.

...