gpt4 book ai didi

javascript - 使函数成为路由中的快速中间件

转载 作者:行者123 更新时间:2023-12-03 04:47:44 25 4
gpt4 key购买 nike

所以我有一条路线,并且 route 有一些丑陋的代码,我想制作一个中间件。唯一的问题是 Express 的文档不清楚,我的代码只有 404。

我怎样才能做到这一点?

路线:

router.get('/product/:slug', function(req, res) {
//route params
var slug = req.params.slug;
var productResp; //scope up api response to pass to render()
console.log(slug);
//api call
Prismic.api("https://prismic.io/api").then(function(api) {
return api.getByUID('product' , slug);
}).then(function(response) {

app.use(markedHtml)
})
.catch(function(error) {
res.render('404');
})
});

功能:

  var markedHtml = function(req, res, next) {
var md_col_1 = response.data["product.markdown-col-one"].value[0].text;
var md_col_1_1 = response.data["product.markdown-col-one"].value[1].text;
var md_col_2 = response.data["product.markdown-col-two"].value[0].text;
var md_col_2_1 = response.data["product.markdown-col-two"].value[1].text;
var md_col_3 = response.data["product.markdown-col-three"].value[0].text;
var md_col_3_1 = response.data["product.markdown-col-three"].value[1].text;


var html_col_1 = marked(md_col_1);
var html_col_1_1 = marked(md_col_1_1);
var html_col_2 = marked(md_col_2);
var html_col_2_1 = marked(md_col_2_1);
var html_col_3 = marked(md_col_3);
var html_col_3_1 = marked(md_col_3_1);



res.render('product-template', {
product: response,
md_one: html_col_1,
md_one_1: html_col_1_1,
md_two: html_col_2,
md_two_1: html_col_2_1,
md_three: html_col_3,
md_three_1: html_col_3_1,
})

next();
}

最佳答案

在您的根app.js中,您应该看到您的应用正在使用的所有中间件。这些中间件是按顺序匹配的。如果它们不包含路由参数,它们自然会应用于所有请求。您的路线就在其中,它们看起来像这样:app.use('/', paths);

app.js 中的路由下,声明一个新路由:

const markedHtml = require('./middleware/markedHtml');
app.use('/product/:slug', markedHtml);

./middleware/marketHtml.js 中,您的方法将如下所示,无需 next 调用:

const markedHtml = function(req, res, next) {
// Do stuff with req.apiResponse here.
...

res.render('product-template', {
...
});
}

module.exports = markedHtml;

您的原始路线将如下所示:

router.get('/product/:slug', function(req, res, next) {
//route params
var slug = req.params.slug;
var productResp; //scope up api response to pass to render()
console.log(slug);

//api call
Prismic.api("https://prismic.io/api").then(function(api) {
return api.getByUID('product' , slug);
}).then(function(response) {
req.apiResponse = response;
next();
})
.catch(function(error) {
res.render('404');
});
});

本质上,您的原始路由将接收客户端请求,执行 API 调用等,然后(双关语!)运行 next(); 调用。该提示表示执行下一个适用的中间件,该中间件恰好是 markedHtml,从中调用 View 渲染方法。

如果有任何不清楚或需要额外解释的地方,请告诉我。

可以在此处找到其他文档:http://expressjs.com/en/4x/api.html#app.use

关于javascript - 使函数成为路由中的快速中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42800707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com