#javascript #node.js #express
#javascript #node.js #выразить
Вопрос:
Я пытаюсь сохранить некоторое случайное значение в своем запросе. Вот так:
req.name = "Mark"
Проблема в том, что я могу получить к нему доступ только в контроллере, который я установил. Когда я
console.log(req.name)
в другом контроллере я получаю неопределенный.
Мой код здесь:
export const getCaptcha = async (req, res, next) => {
const captcha = await svgCaptcha.createMathExpr({
size: 5,
noise: 3,
color: true,
background: '#08af96'
})
req.captcha = captcha.text
res.status(200).send(captcha.data)
}
export const checkCaptcha = (req, res, next) => {
const { result } = req.body
console.log(req.captcha)
// if (result !== req.captcha) {
// throw new Error('Invalid captcha!')
// }
// res.status(200).json({
// message: 'Success'
// })
}
Компонент маршрута:
import express from 'express'
import { getCaptcha, checkCaptcha } from '../controllers/captcha'
const router = express.Router()
router.get('/captcha', getCaptcha)
router.post('/captcha', checkCaptcha)
export default router
App.js
import captchaRoutes from './routes/captcha'
app.use(captchaRoutes)
Спасибо за помощь.
Комментарии:
1. Покажите, где вы используете оба промежуточных программного обеспечения.
2. В моем файле маршрутов captcha. У меня есть get route для getCaptcha и post route для checkCaptcha. И я использовал его в своем app.js с помощью app.use(captchaRoutes)
3. Покажите этот код, иначе я не смогу вам помочь.
4. @MarcosCasagrande Я отредактировал свой вопрос, вы можете его увидеть.
Ответ №1:
Поскольку getCaptcha и checkCaptcha — это два разных промежуточных ПО, используемых в двух разных конечных точках, объект req не является общим для ваших запросов. Итак, если вы установите какое-либо свойство в req во время конкретного запроса, вы никогда не получите это самое значение из другого запроса, потому что объект req будет совершенно новым.
Итак, что вам нужно, так это иметь другое место, где вы храните свою информацию о captcha.
Например, это может быть redis.
Комментарии:
1. Спасибо. Есть ли какой-либо другой способ сохранить результат моей captcha только для этого запроса?
2. Вы можете ознакомиться с этим пакетом: github.com/lazarofl/svg-captcha-express . Он использует express-session, которые по умолчанию используют memory-storage в качестве хранилища ваших сеансов, поэтому будьте осторожны в своей производственной среде.