Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript VueJs-已返回承诺,但未发生重定向_Javascript_Node.js_Redirect_Vue.js - Fatal编程技术网

Javascript VueJs-已返回承诺,但未发生重定向

Javascript VueJs-已返回承诺,但未发生重定向,javascript,node.js,redirect,vue.js,Javascript,Node.js,Redirect,Vue.js,我正在使用Vue、Node、Express和Mongodb构建登录。我可以在注册时成功地将用户保存到数据库,但我希望在用户注册后将其重定向到其他组件 问题:在我的用户被保存后,什么也没有发生,我被留在同一个注册组件上。我不确定是从服务器还是从客户端重定向我的响应 我看到控制台日志注册,但我看不到控制台日志注册成功,我不确定原因。。有人能帮忙吗 ----客户端代码---- 注册.vue <template> <v-layout > <v-flex xs6

我正在使用Vue、Node、Express和Mongodb构建登录。我可以在注册时成功地将用户保存到数据库,但我希望在用户注册后将其重定向到其他组件

问题:在我的用户被保存后,什么也没有发生,我被留在同一个注册组件上。我不确定是从服务器还是从客户端重定向我的响应

我看到控制台日志
注册
,但我看不到控制台日志
注册成功
,我不确定原因。。有人能帮忙吗

----客户端代码----

注册.vue

<template>
  <v-layout >
    <v-flex xs6 offset-xs3>
      <div class="white elevation-2">
        <v-toolbar flat dense class="blue" dark>
          <v-toolbar-title>Register</v-toolbar-title>
        </v-toolbar>

        <div class="pl-4 pr-4 pt-2 pb-2">
          <v-text-field label="email" v-model="email"/>
          <br>
          <v-text-field label="password" v-model="password"/>
          <br>
          <div class="error" v-html="error"></div>
          <v-btn class="blue" dark @click="register">Register</v-btn>
        </div>
      </div>
    </v-flex>
  </v-layout>
</template>

<script>
  import AuthenticationService from '../services/AuthenticationService'
  export default {
    data () {
      return {
        email: '',
        password: '',
        error: null
      }
    },
    methods: {
      async register (res, req) {
        try {
          console.log('registering');
          const response = await AuthenticationService.register({
            email: this.email,
            password: this.password
          });
          res.status(200).send('registration successful'); // I NEVER SEE THIS!!
          console.log('registration successful: ' + response.data);
          this.$router.push('dashboard')
        } catch (error) {
          console.log('error during reg on front eng');
          this.error = error.response.data.error;
        }
      }
    }
  }
</script>
Api.js

import axios from 'axios';

export default() => {
  return axios.create({
    baseURL: 'http://localhost:5000'
  })
}
----服务器代码----

index.js

const express = require("express");
const mongoose = require('mongoose');
const cookieSession = require('cookie-session');
const passport = require('passport');
const bodyParser = require('body-parser');
const keys = require('./config/keys');
const cors = require('cors');

require('./models/User');
require('./services/passport');


// grab db access for admin rights
mongoose.connect(keys.mongoURI);

//create an app using express route handlers
const app = express();
app.use(cors());

app.use(bodyParser.json());
// allow the app to use cookies
app.use(
    cookieSession({
        maxAge: 30 * 24 * 60 * 60 * 1000,
        keys: [keys.cookieKey]
    })
);

// tell passport to use cookies
app.use(passport.initialize());
app.use(passport.session());

// this file returns a function which uses app object as an arg
require('./routes/authRoutes')(app);

const PORT = process.env.PORT || 5000;
app.listen(PORT);
authrouts.js

const passport = require('passport');
const authenticationController = require('../controllers/AuthenticationController');
const authenticationControllerPolicy = require('../policies/AuthenticationControllerPolicy');

/**
 * Authentication routing for Google OAuth
 * @type {Passport}
 */
module.exports = (app) => {

    app.post('/register',
        //authenticationControllerPolicy.register,
        authenticationController.register);


};
authenticationController.js

const jwt = require('jsonwebtoken');
const config = require('../config/config');
//const bcrypt = require('bcrypt');

const mongoose = require('mongoose');

const User = mongoose.model('users');

module.exports = {

    async register(req, res) {
        console.log('authenticationController: ' + JSON.stringify(req.body));

        try {
            const user = await User.find({email: req.body.email}).count();

            if(user) {
                console.log('user exists in db');
                return;
            } else {
                console.log('creating new user entry');
                const newUser = await new User({
                    email: req.body.email,
                    password: req.body.password
                }).save();
                res.send(newUser);
            }

        } catch (error) {
            console.log(error);
        }
    }
};

您确定您的
AuthenticationService.register
确实正确返回了承诺吗

wait表达式导致
async
函数执行暂停,直到
承诺
得到满足,该承诺被解决或拒绝,并在满足后继续执行
async
函数。恢复时,
await
表达式的值是已实现的
承诺的值


有关更多信息,请参见我在
Registration.vue中注释掉这一行后的,一切正常

res.status(200).send('registration successful')


不知道为什么…

你知道这是个好问题,我没有答案。我刚刚添加了
res.send(res.user)
在我的
authenticationController
中,因为我认为我需要从服务器向客户端返回响应。不幸的是,这在我的前端上造成了进一步的问题,我收到了如下错误
未处理的承诺拒绝类型错误:无法在VueComponent上读取未定义的
的属性“数据”。_callee$(Register.vue?b5de:33)
,这可能是由于忘记
返回内部承诺造成的,请参阅
authenticationController
else
语句中的内容<代码>返回res.send(newUser)?对不起,我不太明白为什么我必须返回任何东西以及在哪里?最初的承诺是在
寄存器中作出的
组件,后续的承诺也是在后端作出的。。当我试图返回任何一个地方时,我仍然会得到上面的
TypeError
。。你能澄清一下你的意思吗?
const jwt = require('jsonwebtoken');
const config = require('../config/config');
//const bcrypt = require('bcrypt');

const mongoose = require('mongoose');

const User = mongoose.model('users');

module.exports = {

    async register(req, res) {
        console.log('authenticationController: ' + JSON.stringify(req.body));

        try {
            const user = await User.find({email: req.body.email}).count();

            if(user) {
                console.log('user exists in db');
                return;
            } else {
                console.log('creating new user entry');
                const newUser = await new User({
                    email: req.body.email,
                    password: req.body.password
                }).save();
                res.send(newUser);
            }

        } catch (error) {
            console.log(error);
        }
    }
};