[英]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.