gpt4 book ai didi

javascript - 如何在路由器中正确使用Express中间件功能?

转载 作者:行者123 更新时间:2023-12-03 01:04:08 26 4
gpt4 key购买 nike

在下面的示例中,您可以看到 csrfProtectionparseForm 函数在 GET 和 POST 请求中作为参数/回调传递...

var cookieParser = require('cookie-parser')
var csrf = require('csurf')
var bodyParser = require('body-parser')
var express = require('express')

// setup route middlewares
var csrfProtection = csrf({ cookie: true })
var parseForm = bodyParser.urlencoded({ extended: false })

// create express app
var app = express()

// parse cookies
// we need this because "cookie" is true in csrfProtection
app.use(cookieParser())

app.get('/form', csrfProtection, function(req, res) { // HERE
// pass the csrfToken to the view
res.render('send', { csrfToken: req.csrfToken() })
})

app.post('/process', parseForm, csrfProtection, function(req, res) { // AND HERE
res.send('data is being processed')
})

但是,如果你像我一样使用路由器,如何才能使用这些相同的功能呢?我知道通过在 app.js 中“使用”它们,它们可以在 req 对象上使用,但在上面给出的示例中,它们需要作为 GET 的第二个、第二个和第三个参数和 POST 路由,但是 req 在您进入最终回调之前才可用?!

所以我知道你不能执行以下操作(仅作为示例)...那么你应该如何使用它们?我是否必须在每个路由文件中重新声明它们?

单独的路由文件:routes/someroute.js...

router
.post('/', req.body, req.csrfProtection, (req, res) => {

})

...

提前致谢:)

引用:https://www.npmjs.com/package/csurf

更新

根据下面的评论,我对我的 app.js 文件进行了以下更改。

app.js

...

global.bodyParser = require('body-parser').urlencoded({extended: false});
app.use(global.bodyParser);

global.csrfProtection = csrf({ cookie: false });

...

routes/myroute.js

router
.post('/', global.bodyParser, global.csrfProtection, (req, res) => {})

但是,当我重新启动服务器时,我看到此错误,这表明全局函数未定义...我在这里缺少什么? :-/

Error: Route.post() requires a callback function but got a [object Undefined]

最佳答案

我认为您询问有关在所有 API/路由文件之间共享中间件的问题

你可以这样做:

首先在您的主文件中将其命名为 server.js 我们使用您的代码

var cookieParser = require('cookie-parser')
var csrf = require('csurf')
var bodyParser = require('body-parser')
var express = require('express')

// create express app
var app = express()

// setup route middlewares
app.use(bodyParser.urlencoded({ extended: false }))

// parse cookies
app.use(cookieParser())
//enable your JS API/route script.
const awesomeAPI = require('./awesomeApi.js');
app.use('/awesome', awesomeAPI );
app.listen(3000);

现在你有了文件,我们将其命名为 awesomeApi.js

const express = require('express');
const awesomeApi = express.Router();
awesomeApi.route('/')
.post(req,res => {
//req.body present here. And body parser middle ware works.
})
module.exports = awesomeApi;

希望这有帮助。

一些链接:

https://expressjs.com/en/guide/using-middleware.html

https://expressjs.com/en/4x/api.html#express

关于javascript - 如何在路由器中正确使用Express中间件功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52486646/

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