【问题标题】:Fetch does not return anythingFetch 不返回任何东西
【发布时间】:2020-07-31 19:56:23
【问题描述】:

我正在使用 fetch 发出发布请求并寻找回复以在我的页面上使用它。 我有这样的代码:

  e.preventDefault();
  const data = {name: document.querySelector('input[name = "name"]').value, age: document.querySelector('input[name="age"]').value}
  fetch('/', {
    method: 'POST', // *GET, POST, PUT, DELETE, etc.
    headers: {
      'Content-Type': 'application/json'
      // 'Content-Type': 'application/x-www-form-urlencoded',
    },
    body: JSON.stringify(data) // body data type must match "Content-Type" header
}).then((response) => response.json()).then((data) => console.log(data));
  
})

数据可以到后端,但是 fetch 显然没有返回任何内容,并且没有响应以及数据。我错过了什么?

好像我没有发回任何东西,但我不知道在这种情况下该怎么做。

const express = require('express');
const app = express();
const port = process.env.PORT || 3000;
const handlebars = require('express-handlebars');
const path = require('path');
const {MongoClient, ObjectID} = require('mongodb');
const url = 'mongodb://127.0.0.1:27017/';
const bodyParser = require('body-parser');

app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())

app.use(express.static('public'));
app.set('views', path.join(__dirname, '/views'));
app.engine('handlebars', handlebars());
app.set('view engine', 'handlebars');

app.get('/', (req, res) => {
  res.render('home');
})



app.get('/data', (req, res) => {
  MongoClient.connect(url, { useUnifiedTopology: true }, (err, client) => {
    if (err) {
      return console.log(err);
    }
    console.log('Connect success');
    const dbname = 'people';
    const db = client.db(dbname);
    db.collection('people').find().toArray()
    .then(response => response)
    .then(data => res.send(data));
  })
})

app.post('/', (req, res) => {
  MongoClient.connect(url, { useUnifiedTopology: true }, (err, client) => {
    if (err) {
      return console.log(err);
    }
    console.log('Connect success');
    const dbname = 'people';
    const db = client.db(dbname);
    db.collection('people').insertOne(req.body, (error) => {
      if (error) {
        return console.log(error);
      }
      console.log('Insertion success');
    })
})})

app.listen(port, () => {
  console.log(`server has started on ${port}`);
})

你是对的,我不发送任何东西,这就是为什么在前面什么都没有。我已经弄清楚我错过了什么,谢谢。

正确的代码是:

app.post('/', (req, res) => {
  MongoClient.connect(url, { useUnifiedTopology: true }, (err, client) => {
    if (err) {
      return console.log(err);
    }
    console.log('Connect success');
    const dbname = 'people';
    const db = client.db(dbname);
    const entry = req.body;
    db.collection('people').insertOne(entry, (error) => {
      if (error) {
        return console.log(error);
      }
      console.log('Insertion success');
      res.send(entry);
    })
})})

【问题讨论】:

  • 您是否从后端发送了任何响应?你能把你的后端代码贴在这里吗?
  • 嗨,@ubaidshaikh,感谢您的回复,我已经发布了我的完整后端代码。

标签: javascript fetch-api


【解决方案1】:

您没有从后端返回任何内容,因此 fetch 不会返回任何内容,显然您没有得到任何响应。尝试像下面这样发送回复

app.post('/', (req, res) => {
    MongoClient.connect(url, {
        useUnifiedTopology: true
    }, (err, client) => {
        if (err) {
            return console.log(err);
        }
        console.log('Connect success');
        const dbname = 'people';
        const db = client.db(dbname);
        db.collection('people').insertOne(req.body, (error, response) => {
            if (error) {
                return console.log(error);
            } else {
                console.log('Insertion success');
                console.log('inserted record', response.ops[0]);
                res.send(response.ops[0]);
            }
        })
    })
})

请试试这个,让我知道它是否有效。

【讨论】:

  • 顺便问一下,你想要什么作为回应??
  • 不,它不工作,给我 - 无法读取未定义的属性 'then'
  • 我想获取我要插入的对象以在前端处理它。
猜你喜欢
  • 1970-01-01
  • 2023-03-28
  • 2011-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多