簡體   English   中英

Node.js - 沒有返回響應的正文

[英]Node.js - No body returned for response

該路由應該從外部 API 獲得響應,並返回其主體。

const router = require("express").Router();
import generateSudoku from '../components/sudoku_generator';

router.route('/:difficulty').get(async (req: any, res: any) => {
  const difficulty = req.params.difficulty

  generateSudoku(difficulty)
    .then(data => {
        res.json(data)
          .then('Sudoku generated.')
          .catch((err: string) => res.status(400).json('Error: ' + err));
    })
});

module.exports = router;

這是generateSudoku數獨 function:

import axios from 'axios';

const BASE_URL = 'https://sugoku.herokuapp.com/board?difficulty=';

const generateSudoku = (difficulty: string) => {

      return axios.get(`${BASE_URL}${difficulty}`)
              .then(function(response){
              this.response = response.data
              return this.response
            })
            .catch (err => console.error(err));
};

export default generateSudoku;

問題是對 http://localhost:5000/play/easy 的 GET 請求沒有返回正文。 可能是什么問題呢? 編輯:
這是我的app.tsx文件:

const mongoose = require("mongoose");
const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser')

require('dotenv').config();


const app = express();
const port = process.env.port || 5000;

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

//app.use(express.json);
app.use(cors())

const uri = process.env.ATLAS_URI;

mongoose.connect(uri, {useNewUrlParser: true, useCreateIndex: true, useUnifiedTopology: true})
  .then(console.log("Database connected."))
  .catch((err: string) => console.log("Error: " + err));

const connection = mongoose.connection;
connection.once('open', () => {
  console.log("MongoDB database connection established successfully.")
})

const playRouter = require('./routes/play');
const recordsRouter = require('./routes/records');
const usersRouter = require('./routes/users')

app.use('/play', playRouter);
app.use('/records', recordsRouter);
app.use('/users', usersRouter)

app.listen(port, () => {
  console.log("Server is running.");
});

我認為res.json不會返回 promise,所以我想它只是默默地拋出一個錯誤。 此外, .then('Sudoku generated')真正應該做什么?

嘗試移除該部分並將卡扣也移出

generateSudoku(difficulty)
    .then(data => res.json(data))
    .catch((err: string) => res.status(400).json('Error: ' + err));

或者,由於您使用async ,因此不需要使用then ,您可以這樣寫:

try {
    const data = await generateSudoku(difficulty);
    res.json(data);
} catch(err) {
    res.status(400).json('Error: ' + err)
}

以下部分對我來說似乎是錯誤的,如下面的內聯評論...

async (req: any, res: any) => {
  const difficulty = req.params.difficulty

  //no await for this promise
  generateSudoku(difficulty)
    .then(data => {
        res.json(data)
          //possible 'then' call on a non-promise
          .then('Sudoku generated.')
          .catch((err: string) => res.status(400).json('Error: ' + err));
    })
}

也許之前調用“then”的隱含錯誤被吞沒了,因為您沒有等待來自異步 function 的任何內容。 我推測用這個異步 function 替換所有這些可能會給你一個結果......

async (req: any, res: any) => {
  try{
    const data = await generateSudoku(req.params.difficulty);
    res.json(data);
    return 'Sudoku generated.';
  }
  catch(err){
    res.status(400).json('Error: ' + err)
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM