繁体   English   中英

在快递上使用axios待决电话

[英]Pending call using axios on express

我试图使用带有express的axios对api做一个非常简单的调用,并且不知道为什么它总是在浏览器上待决

这是我的路线

var express = require("express");
var router = express.Router();
const controller = require("../../controllers/issues.controller");
/* GET ALL ISSUES */
router
  .route('/')
  .get(controller.getAllIssues);

这是我的控制器

var axios = require("axios");
const url = "https://redmine-mock-api.herokuapp.com/api/v1/issues?after=2019-04-13T12:00";


exports.getAllIssues = () => {
  const res = axios.get(url)
    .then(res => console.log(res.data))
    .catch(err => console.log("Axios err: ", err));
}

这是app.js.

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./src/api/routes/v1/index');
var usersRouter = require('./src/api/routes/v1/users');
var issuesRouter = require('./src/api/routes/v1/issues');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({
  extended: false
}));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/v1/users', usersRouter);
app.use('/v1/issues', issuesRouter);

// catch 404 and forward to error handler
app.use(function (req, res, next) {
  next(createError(404));
});

// error handler
app.use(function (err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

在浏览器上它总是待定,我已经尝试从.then到await / async并且不知道我做错了什么。 当我在相同的文件上有路由和控制器时,它正在工作。 请小费的人吗?

我相信问题出在控制器上。 由于你从未运行res变量函数(只是定义它),所以没有任何反应,因为响应没有被发回......它是悬空的。

exports.getAllIssues = (req, res) => {
  axios.get(url)
    .then(axRes => {
        console.log(axRes.data)
        // this below line is what closes the loop on waiting for the controller
        res.json(axRes.data);
    })
    .catch(res.json);
}

异步方法看起来非常相似

exports.getAllIssues = async (req, res) => {
   try {
      const axRes = await axios.get(url);
      res.json(axRes.data);
   } catch(err) {
      res.send(err);
   }
}

你可以在http://expressjs.com/en/api.html#res.json上阅读不同的表达res.send方法等

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM