不是服务器中间件之类的专家,但没有太多线索。
在vue组件中,我正在使用axios检索数据:
axios
.get('/api/getDailyFeedback', {
params: {
start: '2018-05-01'
}
})
这是Nuxt中的express(版本4.16.2)服务器中间件设置。我已经获得了正常的get和post请求才能正常工作,但问题是当我想将参数传递给get请求时,如下所示:
router.get('/getDailyFeedback', (req, res) => {
console.log('Query:', req.query.start);
//do stuff
});
我对Express 4的经验很少,我花了一点时间才意识到为什么在post请求的主体中传递的参数是未定义的,但这是因为我需要添加body-parser.json()到我的nuxt配置,因为他们从主快递包中删除了它。同样地,我认为我需要bodyParse.urlencoded,但这没有用。这是我添加到nuxt.config中的行:
serverMiddleware: [bodyParser.urlencoded({ extended: false }), bodyParser.json(), '~/api'],
我不确定内容类型是否设置不正确,或者我在这里遗漏了一些简单的内容。我知道我可以使用各种库从我有权访问的url字符串中获取参数,因为Axios按预期工作并添加了我的' params'对象到我的get请求结束时。但是我已经看到很多解决其他问题的方法就是访问req.query' Alas Express无法定义req.query对象,甚至无法定义req.params或req.body。
希望这是足够的细节继续,非常感谢阅读和任何建议。
答案 0 :(得分:1)
第一次尝试在Nuxt中使用get请求是一件令人不快的惊喜,不是吗? Nuxt创建了一个连接实例,导致一些陷阱。它的req是Node.js http请求对象,因此它没有query property
,并且在获取请求中也会跳过request.body
!
但是一切都有办法。你的代码:
axios.get('/api/getDailyFeedback', {
params: {
start: '2018-05-01'
}
})
转换为以下URI调用:
<强> / API / getDailyFeedback?开始= 2018年5月1日强>
所以你已经获得了URI中的所有参数,你可以通过url解析来检索它们。顺便提一下,模块url
附带了Node.js。
const url = require("url");
router.get('/getDailyFeedback', (req, res) => {
let queryData = url.parse(req.url, true).query
console.log('Query:', queryData.start)
});
我写了一个小帮手,用自定义属性扩展了req。这是代码:
router.use((req, res, next) => {
var theQuery = url.parse(req.url, true).query
req.queryData = theQuery
next()
})
然后你可以像这样使用它:
router.get('/getDailyFeedback', (req, res) => {
console.log('Query:', req.queryData.start)
});
通过get传递params的其他方法是使用可选的uri段:
router.get('/getDailyFeedback/:start?', (req, res) => {
console.log('Query:', req.params.start)
});
答案 1 :(得分:1)
我使用的是 Nuxt 2.15,我可以像这样访问查询参数 req._parsedOriginalUrl.query
答案 2 :(得分:0)
您可以访问Nuxt get params,而无需其他模块。 只需使用:
req.request.get()