【问题标题】:Vue Js Form post issues to serverVue Js Form 将问题发布到服务器
【发布时间】:2020-05-16 06:16:01
【问题描述】:

我正在构建一个网站,但我找不到使用 post 将我的注册表单数据发送到我的服务器的方法。我尝试使用 axios,但它没有用。 这基本上就是我的注册页面的样子

<template>
  <div id = "app">
    <!-- <router-view /> -->
    <h1>{{ $t('signup') }}</h1>
    <p>{{ $t('signupMsg') }}</p>
    <b-form @submit="onSubmit" @reset="onReset" method="post" >
      <b-form-group
        id="input-group-1"
        label-for="input-1"
      >
      <p1> Name: </p1>
        <b-form-input
          id="input-1"
          v-model="form.name"
          required
          placeholder="Enter Name and Vorname"
        ></b-form-input>
      </b-form-group>

      <b-form-group id="input-group-2" label-for="input-2" >
        <p1>{{ $t('tech') }}</p1>
        <b-form-input
          id="input-2"
          v-model="form.technicianID"
          required
          placeholder="Enter assigned Technician ID"
        ></b-form-input>
      </b-form-group>
      <b-form-group id="input-group-3" label-for="input-3">
        <p1> Email ID: </p1>
        <b-form-input
          id="input-3"
          v-model="form.email"
          required
          placeholder="Enter assigned Email ID"
        ></b-form-input>
      </b-form-group>
      <b-form-group id="input-group-4" label-for="input-4">
        <p1> {{ $t('branch') }} </p1>
        <b-form-input
          id="input-4"
          v-model="form.branch"
          required
          placeholder="Enter your branch"
        ></b-form-input>
      </b-form-group>

      <!-- <b-button type="submit" > <router-link to="/requestsuccess">{{ $t('signup') }}</router-link> </b-button> -->
      <b-button type="submit" >{{ $t('signup') }} </b-button>
      <b-button type="reset" variant="danger">{{ $t('reset') }}</b-button>
      <router-link to="/" class="btn btn-link">{{ $t('back') }}</router-link>
    </b-form>
  </div>
</template>

<script>
import axios from 'vue-axios'
export default {
  name: 'signup',

  data() {
      return {
        form: {
          name: '',
          technicianID: '',
          email:'',
          branch: ''
        }
    }
    },
    methods: {
      onSubmit(evt) {
        evt.preventDefault()
        axios({
          method: 'post',
          url: '/insert',
          data: this.form
          })
        .then(function (response) {
        //handle success
          console.log(response);
          })
        .catch(function (response) {
        //handle error
        console.log(response);
    });

      },
      onReset(evt) {
        evt.preventDefault()
        // Reset our form values
        this.form.name = ''
        this.form.technicianID = ''
        this.form.email = ''
        this.form.branch = ''
        // Trick to reset/clear native browser form validation state
        this.show = false
        this.$nextTick(() => {
          this.show = true
        })
      }
    }
}

</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style>
</style>

这就是我的 index.js 发布后的样子

router.post('/insert', function(req, res, next) {
  var item = {
    name: req.body.name,
    technicianID: req.body.technicianID,
    email: req.body.email,
    branch: req.body.branch
  };

  mongo.connect(url, function(err, db) {
    assert.equal(null, err);
    db.collection('users').insertOne(item, function(err, result) {
      assert.equal(null, err);
      console.log('Item inserted');
      db.close();
    });
  });

  res.redirect('../components/requestsuccess');
});

我对此很陌生,但我找不到将数据发送到服务器的方法。

【问题讨论】:

  • 你能说得更具体些吗?你的 HTTP 请求是否到达服务器,你得到响应了吗?服务器或客户端是否有任何错误?
  • 有没有办法找到这个?我真的很抱歉,但这是我第一次做这样的事情
  • 您可以将调试器附加到后端服务器或记录响应,然后您可以在服务器的控制台上对其进行检查。您还可以通过浏览器的开发工具检查客户端的错误。
  • 在您的服务器中,您可以:console.log(req.body),您是否会在服务器日志中得到一些结果,然后,为什么会得到这样的结果res.redirect('../components/requestsuccess')
  • res.redirect('../components/requestsuccess') 是我在完成将数据发送到服务器后要访问的页面

标签: node.js mongodb express vue.js server


【解决方案1】:

你可以试试下面的代码:

后端:您可以使用以下代码更改您的后端

router.post('/insert', function(req, res, next) {
  console.log(req.body);
  mongo.connect(url, function(err, db) {
    db.collection('users').insertOne(req.body, function(err, result) {
      if(err) return res.status(500).send(err);
      return res.status(200).send(result.ops[0]);
      db.close();
    });
  });
});

上面的代码只是一个简单案例的例子。如果你想添加assert,那么你可以确保它工作正常。如果上面的简单代码可以运行,那么您可以添加assert

确保您已经在您的服务器上安装了cors,并将其添加到您的app.jsserver.js 下面的代码中:

app.use(cord({origin: "*"});

然后,确保调用端点使用:http://。不仅是localhost,还有http://localhost

前端

onSubmit(evt) {
  evt.preventDefault()
  axios({
          method: 'post',
          url: '/insert', // make sure your endpoint is correct
          data: this.form
      })
      .then(response => {
          //handle success
          console.log(response.data);
          // do some stuff here: redirect or something you want
      })
      .catch(error => {
          //handle error
          console.log(error.data);
      });
},

确保您的端点正确。

希望对你有帮助。

【讨论】:

  • router.post('/insert' 这里 /insert 将是我的端点对吗?也没有工作。我觉得可能是服务器和前端没有连接
  • 是的,我试过了。它没有用。我在控制台中也看不到任何输出
  • 它说从源“localhost:8080”访问 XMLHttpRequest 在“localhost:8081/insert”已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:没有“访问控制” -Allow-Origin' 标头出现在请求的资源上。
  • 现在控制台上的新更新是 ERR_CONNECTION_REFUSED
  • Visual Studio 调试器还显示“C:\Program Files\nodejs\node.exe bin\www.js OPTIONS /insert 204 1.438 ms - 0 (node:50016) DeprecationWarning: current Server Discovery and监控引擎已弃用,将在未来版本中删除。要使用新的服务器发现和监控引擎,请将选项 { useUnifiedTopology: true } 传递给 MongoClient 构造函数。c:\Users\ajayr\Documents\liebherr-real\node_modules \mongodb\lib\topologies\server.js:294 抛出错误;^
猜你喜欢
  • 2017-03-30
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
  • 2015-07-28
  • 2020-02-13
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
相关资源
最近更新 更多