Javascript 在节点MVC中传递req.params

Javascript 在节点MVC中传递req.params,javascript,node.js,express,model-view-controller,Javascript,Node.js,Express,Model View Controller,我试图弄清楚如何在MVC环境下使用Express传递req.params 我知道如何正确地引用req.params,但当我将app.js拆分为模型和控制器时,我完全不知所措 参考代码: routes.js app.get('/category/:category', descriptor.getSingleCategory) model.js let getSingleCat = (cb) => { let queryString = 'SELECT * FROM categor

我试图弄清楚如何在MVC环境下使用Express传递req.params

我知道如何正确地引用req.params,但当我将app.js拆分为模型和控制器时,我完全不知所措

参考代码:

routes.js

app.get('/category/:category', descriptor.getSingleCategory)
model.js

let getSingleCat = (cb) => {
    let queryString = 'SELECT * FROM categories WHERE category_id = $1'
    let queryValue = [req.params.category]
    db.query(queryString, queryValue, cb)
}
let getSingleCat = (params, cb) => {
    let queryString = 'SELECT * FROM categories WHERE category_id = $1'
    let queryValue = params.category
    db.query(queryString, queryValue, cb)
}
controller.js

const getSingleCategory = (req, response) => {
    console.log(req.params.category);
    db.desc.getSingleCat((err, queryRes) => {
        if (err) {
            //render something went wrong
            response.send('something went wrong')
        } else {
            response.send(queryRes.rows)
        }
    })
}
const getSingleCategory = (req, response) => {
    console.log(req.params.category);
    db.desc.getSingleCat(req.params, (err, queryRes) => {
        if (err) {
            //render something went wrong
            response.send('something went wrong')
        } else {
            response.send(queryRes.rows)
        }
    })
}
我已经检查了所有的需求,它们工作正常。是否有一种不使用中间件传递req.params的普通方法?

在模型中使用req.params的唯一方法是将其作为参数发送,如下例所示:

model.js

let getSingleCat = (cb) => {
    let queryString = 'SELECT * FROM categories WHERE category_id = $1'
    let queryValue = [req.params.category]
    db.query(queryString, queryValue, cb)
}
let getSingleCat = (params, cb) => {
    let queryString = 'SELECT * FROM categories WHERE category_id = $1'
    let queryValue = params.category
    db.query(queryString, queryValue, cb)
}
controller.js

const getSingleCategory = (req, response) => {
    console.log(req.params.category);
    db.desc.getSingleCat((err, queryRes) => {
        if (err) {
            //render something went wrong
            response.send('something went wrong')
        } else {
            response.send(queryRes.rows)
        }
    })
}
const getSingleCategory = (req, response) => {
    console.log(req.params.category);
    db.desc.getSingleCat(req.params, (err, queryRes) => {
        if (err) {
            //render something went wrong
            response.send('something went wrong')
        } else {
            response.send(queryRes.rows)
        }
    })
}

您不能使用全局变量,因此这是唯一的方法。此外,此变量req只能在绑定到将接收实际请求的端点的函数中访问。

此处尝试正确理解流程,对于节点中的MVC来说仍然是新的。my routes.js中的req将首先传递给controller.js,它存储在参数req.params中,然后再传递给model.js params?是的,没错。首先,您的后端将收到一个请求,该请求将被路由绑定。该路由将有一个相关的回调函数,该函数接收两个参数req,res。在该函数中,您将有权访问所有请求参数,在那里您将有逻辑来处理它们。