2017-02-08 2 views
1

У меня есть вопрос. В стороне клиента, я использую выборки API, чтобы получить ответ, это кодИзвлечение не может получить ответ от сервера

window.fetch('/signup', { 
    method: 'post', 
    headers: { 
    'Content-Type': 'application/x-www-form-urlencoded' 
    }, 
    body: formDataStr, 
    credentials: 'same-origin' 
}) 
.then(function (response) { 
    return response.json() 
}) 
.then(function (result) { 
    if (result.code === 0) { 
    return this.$router.push('/main') 
    } 
}) 
    .catch((err) => { 
    self.isLoading = false 
    console.log(err) 
}) 

На сервере, написано в узле и выразить это код:

`app.post('/login', function (req, res) { 
    var loginEmail = req.body.email2 
    var loginPsd = req.body.secret 
    UserDataModel.findOne({ email: loginEmail }, { 
    name: 1, 
    password: 1, 
    email: 1 
    }, function (err, userInfo) { 
    if (err) { 
     console.log(err) 
    } 
    if (!userInfo) { 
     res.send({ 
     code: -1, 
     msg: 'user not exist' 
     }) 
     return console.log('user not exist') 
    } 
    userInfo.comparePassword(loginPsd, function (err, isMatch) { 
     if (err) { 
     console.log(err) 
     } 
     if (isMatch) { 
     req.session.isLogin = true 
     req.session.userInfo = { 
      userName: userInfo.name, 
      userEmail: userInfo.email 
     } 
     console.log(req.session) 
     res.json({ 
      code: 0, 
      msg: 'login succeed!' 
     }) 
     res.end() 
     } else { 
     res.send({ 
      code: -2, 
      msg: 'wrong password' 
     }) 
     } 
    }) 
    }) 
})` 

Консоль показывает, что сообщение успешно с кодом статуса 200. Однако выбор, следующий после этого, не может выполнить. Кажется, что от сервера нет ответа.

ответ

1

Вы не показываете код, который потребляет, что response.json() и не ясно (для меня по крайней мере), что вы имеете в виду под «принести следующую тогда обещание не может выполнить» ...

Но вы знаете, что response.json() возвращается обещание, не так ли?

Таким образом, вы знаете, чтобы получить фактическое JSON от ответа и, например, выходной это на консоль, вам нужно:

response.json().then(function(json) { 
    console.log(json); 
}); 

Вы можете найти более подробную информацию в разделе тела в MDN Using Fetch статьи :

Оба запроса и ответы могут содержать данные тела. Тело представляет собой экземпляр любого из следующих типов.

  • ArrayBuffer
  • ArrayBufferView (Uint8Array и друзей)
  • Blob/File
  • string
  • URLSearchParams
  • FormData

Смесин Body определяет следующие способы извлечения тела (реализуемый как Request, так и Response). Все они возвращают обещание , которое в конечном итоге разрешено с фактическим содержанием.

  • arrayBuffer()
  • blob()
  • json()
  • text()
  • formData()

(Извиняюсь, если это говорит вам то, что вы уже знаете, но фрагмент кода в Ques это не complete для того, чтобы определить, что это не проблема, с которой вы столкнулись.)

+0

это как Цепочки Promise. возвращенный Promise разрешается в следующий '.then' –

+0

фактически, когда я запускаю программу, этот код' .then (функция (ответ) { return response.json() }) 'не выполняется, сервер успешно получает данные от клиента, но клиент не смог получить ответ от сервера, я много раз пробовал. – zzy

1

Вы используете this внутри функции.Он относится к глобальному объекту.
Try:

.then(function (result) { 
    console.debug(result); // inspect a result 
    if (result.code === 0) { 
    return self.$router.push('/main'); // assume you have var self = this above. 
    } 
    Promise.reject(new Error('Error code: ' + result.code)); // generate an error 
}) 
+0

Я только это. Но я просто не могу получить respnse с сервера – zzy

+0

Есть ли ответ на вкладке «Сеть» в Инструментах разработчика? –

+0

Сообщение успешно с кодом состояния 200 – zzy

0

Вы на стороне клиента код отправляет запрос POST HTTP в /signup, но ваш серверный код настроен для приема запросов POST на /login. Эти URL-адреса должны совпадать, если вы хотите, чтобы ваш сервер обрабатывал эти запросы от вашего клиента.

Смежные вопросы