как передать объект ответа express.js другому модулю

1

Привет всем, я пытаюсь передать объект экспресс-ответа другому модулю, который у меня есть. Так что в моем файле server.js меня есть это

const room = require('../controller/rooms_controller')
app.post('/rooms',  function(req, res){
    var name = req.body.roomname
    var loc  = req.body.loc
    room.newRoom(name, loc,  res)
}) 

Поэтому я пытаюсь передать объект res в модуль rooms_controller. Теперь мой модуль modules_controller выглядит так

const Room  = require('../models/room')

exports.newRoom = function(name, loc, res){


    Room.findOne({'location': loc}, function(err, room, res){
        if(err){
            res.send({err: err})
        }
        if(room){
            res.send({room: room})
        }else{
            var newRoom = new Room()
            newRoom.location = loc
            newRoom.name     = name
            newRoom.save(function(error){
                if(err){
                    res.send({ error: error })
                }
                res.send({room: newRoom})
            })
        }
    })



}

Таким образом, в моей базе данных записи создаются, но я получаю, что я cannot read property send of undefined error в моем терминале. Может кто-нибудь, пожалуйста, помогите мне в этом. Буду признателен

Теги:
express

1 ответ

3
Лучший ответ

Вы делаете это правильно, но перезаписываете res, потому что вы переопределяете его на этой строке

Room.findOne({'location': loc}, function(err, room, res){

Таким образом, res является ответом от Room.findOne вместо аргумента newRoom который является вашим фактическим объектом ответа. Используйте другое имя переменной для одного из них.

  • 0
    room это ответ от findOne , я не думаю, что обратный вызов вообще получает третий аргумент.
  • 1
    Хотя я не знаю, что это за функция, скорее всего, описанный случай @robertklep означает, что вы можете полностью удалить третий аргумент обратного вызова.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню