Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   коллбэк multiparty form.parse не может изменить внешнию переменную (https://javascript.ru/forum/node-js-io-js/60055-kollbehk-multiparty-form-parse-ne-mozhet-izmenit-vneshniyu-peremennuyu.html)

Ame 09.12.2015 10:42

коллбэк multiparty form.parse не может изменить внешнию переменную
 
Пишу простенькую авторизацию через сессии и использую переменную req.session. Вот код:
router.route "/"
.get (req, res, next) ->
    res.render "auth"
.post (req, res, next) ->
    form = new multiparty.Form
    form.parse req, (err, fields, files) ->
        next err if err
            login = fields.login[0]
            pass = fields.pass[0]
            User.authorize login, pass, (err, user) ->
                if err
                    if err instanceof AuthError
                        return res.send err.message
                    else
                        return next err
                req.session.user = user._id
                res.send "success"

А вот код который загружает и передает клиенту данные авторизованному юзеру
module.exports = (req, res, next) ->
  req.user = res.locals.user = null
  if not req.session.user then return do next
  User.findById req.session.user, (err, user) ->
    next err if err
    req.user = res.locals.user = user
    do next


Проблема в том что в коллбэке form.parse, req.session.user = user._id не запоминает user._id. При этом если отказаться от multiparty и FormData(на клиенте), и использовать експрессовский bodyParser. Вот так:
router.route "/"
.get (req, res) ->
    res.render "auth"
.post (req, res, next) ->
    login = req.body.login
    pass = req.body.pass
    User.authorize login, pass, (err, user) ->
        if err
            if err instanceof AuthError
                return res.send err.message
            else
                return next err
        req.session.user = user._id
        res.send "success"


То все работает идеально. Так как же все таки быть если от multiparty нельзя отказаться?

Ame 09.12.2015 18:31

Долго мучаясь я нашел ответ. Оказывается дело было вовсе не в коллбэке. Эта конструкция работает хорошо. Удалите или закройте тему.


Часовой пояс GMT +3, время: 20:05.