【问题标题】:Pass parameter to middleware function and return result将参数传递给中间件函数并返回结果
【发布时间】:2021-02-12 23:01:29
【问题描述】:

所以伙计们,我想要完成而不是设法得到的是编写一个函数,它作为中间件对数据库执行查询,使用 req 和 res 对象,也可以在套接字连接中使用,以传递参数到它,而不是使用 req 和 res 对象。我也希望它返回查询的结果。我尝试使用中间件包装器

function myFunc(param1, param2){
   return (req, res) => {
      here query
}}

在我发送的有或没有 args 的情况下到达端点时有效,但当我从其他地方调用函数时则无效

【问题讨论】:

  • 当您调用 myFunc 时,您会返回一个新函数,您是在调用该函数吗?类似于:myFunc('value1','value2')()
  • 哦,你是对的。这是丢失的。但是现在,如果我这样称呼它,则缺少 req 和 res 所以它会引发错误
  • 我想使用 query.params 或调用函数时给出的参数

标签: node.js function express middleware


【解决方案1】:

当您调用 myFunc 时,您会返回一个新函数。您需要调用该函数,例如

myFunc('value1', 'value2')()

这将导致错误,因为您没有请求或响应对象。这些是快递对象。

重用数据库代码的更好方法是将其放入一个函数中并将该函数注入到中间层。

例如

function getArticleById(id) {
 return db.query('select * from articles where id = $1', [id])
}

然后创建一个将这个函数作为依赖的中间位置

function makeMiddlewere (getArticleById) {
  return (req, res) => {
    return articleById(req.query.id).then(articles => {
      res.json(articles)
    })
  }
}

然后在你的代码中你可以做

正常方式

getArticleById(5).then(articles => {
  console.log(articles)
})

创建中间人

const express = require('express')
const getArticleById = require('./articlebyid')
const makeMiddlewere = require('./makemiddlewere')

const middlwere = makeMiddlwere(getArticleById)
   
const app = express.app
app.get('/article', middlewere)

【讨论】:

    猜你喜欢
    • 2011-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多