获取无法从服务器获得响应

我有个问题。 在客户端,我使用获取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) }) 

在服务器中,它是写在节点和expression,这是代码:

 `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' }) } }) }) })` 

控制台显示post成功,状态码为200.但是,下一次提交的提取将无法执行。 似乎没有来自服务器的回应。

你在一个函数里面使用this 。 它指的是全球性的客体。
尝试:

 .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 }) 

你不显示消耗该response.json()的代码,它不清楚(至less对我来说)你的意思是“取下一个承诺不能执行”…

但是你知道response.json()返回一个Promise,对吗?

所以你知道从响应中获得实际的JSON,例如,输出到控制台,你需要:

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

您可以在MDN Using Fetch文章的Body部分中find更多详细信息:

请求和响应都可能包含正文数据。 主体是以下任何一种types的实例。

  • ArrayBuffer
  • ArrayBufferViewUint8Array和朋友)
  • Blob / File
  • string
  • URLSearchParams
  • FormData

正文mixin定义了以下方法来提取一个正文(由RequestResponse )。 这些都会返回一个最终解决实际内容的承诺

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

(道歉,如果这是告诉你一些你已经知道的事情,但是问题中的代码片段不足以让任何人确定这不是你遇到的问题。)

您的客户端代码正在向/signup发送HTTP POST请求,但您的服务器端代码已设置为在/login处接收POST请求。 这些URL需要匹配,如果你想让你的服务器处理来自客户端的请求。