标签: superagent

如何防止SuperAgent AJAX调用OPTIONS?

我在Firefox上找到了SuperAgent(http://visionmedia.github.com/superagent/)的问题来源.不确定SuperAgent是在AJAX调用中执行它还是FireFox正在触发它.

基本上,每次我进行AJAX调用时,都会在实际的AJAX调用之前在URL上触发OPTIONS方法.很烦人,因为服务器目前不支持OPTIONS.如何在没有废话和重新编码服务器的情况下拨打电话?

谢谢

ajax superagent

5
推荐指数
1
解决办法
2723
查看次数

Beego POST请求正文总是空的

我正在使用Beego的便捷方法来解析请求正文值,并具有以下内容:

路由器文件:

    apiNamespace := beego.NewNamespace("/api")

    apiNamespace.Router("/sessions/google/new", &controllers.SessionsController{}, "get:GoogleNewSession")

    beego.AddNamespace(apiNamespace)
Run Code Online (Sandbox Code Playgroud)

控制器代码:

func (c *SessionsController) URLMapping() {
    c.Mapping("GoogleNewSession", c.GoogleNewSession)
}

func (c *SessionsController) GoogleNewSession() {

    // Always serve JSON
    defer func() {
        c.ServeJson()
    }()

    // This is always blank
    log.Printf("'Received %+v'", c.Ctx.Input.RequestBody)

    c.Ctx.ResponseWriter.WriteHeader(200)
    return

    // truncated
}
Run Code Online (Sandbox Code Playgroud)

前端JS(超级代理):

    request
    .post('/sessions/google/new')
    .use(prefix)
    .send({ code: authCode })
    .set('Accept', 'application/json')
    .end(function(err, res){
        console.log("******* request", res.request)
         if (res.ok) {
            var body = res.body;
            console.log('yay got ' + JSON.stringify(res.body));
         } else {
            console.log("***** err", err);
            console.log("***** not …
Run Code Online (Sandbox Code Playgroud)

http go superagent beego

5
推荐指数
1
解决办法
4518
查看次数

如何在React-Router中从ajax调用中获取401错误时重定向到登录页面?

我正在使用React,React-Router和Superagent.我的Web应用程序中需要授权功能.现在,如果令牌过期,我需要将页面重定向到登录页面.

我已将ajax调用功能放在一个单独的模块中,并且令牌将在每个请求的标头上发送.在我的一个组件中,我需要通过ajax调用获取一些数据,如下所示.

 componentDidMount: function() {

    api.getOne(this.props.params.id, function(err, data) {
      if (err) {
        this.setErrorMessage('System Error!');
      } else if (this.isMounted()) {
        this.setState({
          user: data
        });
      }
    }.bind(this));

  },
Run Code Online (Sandbox Code Playgroud)

如果我收到401(未授权)错误,可能是因为令牌过期或没有足够的权限,该页面应重定向到登录页面.现在,在我的api模块中,我必须使用window.loication="#/login"我不认为这是一个好主意.

var endCallback = function(cb, err, res) {

  if (err && err.status == 401) {
    return window.location('#/login');
  }

  if (res) {
    cb(err, res.body);
  } else {
    cb(err);
  }
};

get: function(cb) {
  request
    .get(BASE_URL + resources)        
    .end(endCallback.bind(null, cb));
},
Run Code Online (Sandbox Code Playgroud)

但是,我不能轻易地在我的api模块中调用react-router方法.有没有一种优雅的方式来实现这个简单的功能?我不想在每个需要授权的反应组件中添加错误回调.

ajax superagent reactjs react-router

5
推荐指数
1
解决办法
5870
查看次数

如何使用使用相同查询参数的superagent发送请求

我试图对正在构建URL的php服务器发出请求:

website.com/?q=help&q=moreHelp&q=evenMoreHelp

如何使用superagent传递具有多个值的相同查询?

我试过这个:

req.get( 'website.com')查询({Q: '救命',问: 'moreHelp',问: 'evenMoreHelp'}).结束(...)

但我不确定它实际上是在发送所有三个'q'值.我应该做些什么来确保他们都被送到?

javascript node.js superagent

4
推荐指数
1
解决办法
9121
查看次数

嘲笑superagent post请求与nock不匹配

我不能为我的生活得到一个简单的superagent邮政请求工作.这是我的superagent和nock配置.

SuperAgent的:

request
  .post('https://test.com/api/login')
  .send({
    email: 'test@test.com',
    password: 'testpassword'
  })
  .end((err, res) => {
    if (err) {
      console.log(err);
    }
  });
Run Code Online (Sandbox Code Playgroud)

箭扣:

nock('https://test.com')
  .post('/api/login')
  .send({
    email: 'test@test.com',
    password: 'testpassword'
  })
  .reply(200, {
    id: 1,
    token: 'abc'
  });
Run Code Online (Sandbox Code Playgroud)

我从nock收到以下错误:

{[错误:诺克:否匹配于请求POST https://test.com/api/login { "电子邮件": "test@test.com", "密码": "testpassword"}]状态:404,的StatusCode: 404,响应:undefined}

另一个奇怪的方面是我的superagent响应处理程序中记录了此错误.所以我知道这个电话正在制作和截获.

mocking mocha.js superagent nock

4
推荐指数
1
解决办法
2728
查看次数

如何让superagent回报承诺

我一直在学习Node/Javascript,从一开始就使用promises(我不知道如何使用promises,并且常常想知道其他人如何在没有它们的情况下相处).

因此,我有时需要"宣传"简单的内容,例如阅读文件fs:

var readFile = function(path) {
    return new Promise(function(fulfill, reject) {
        fs.readFile(path, function(err, data) {
            if (err) { reject(err); }
            else { fulfill(data); }
        });
    });
};
Run Code Online (Sandbox Code Playgroud)

这一直很有效.现在我需要做同样的事情superagent,但它使用的链式风格让我陷入困境.

var request = require('superagent');
request.get(...).set(...).set(...).end(callback);  // stuck!
Run Code Online (Sandbox Code Playgroud)

我想end()用一个返回promise 的方法替换方法(或忽略它并添加一个新方法).像这样......

var endQ = function() {
    return new Promise(function(fulfill, reject) {
        this.end(function(err, res) {     // "this" is the problem!
            if (err) { reject(err); }
            else { fulfill(res); }
        });
    });
};

// then I could …
Run Code Online (Sandbox Code Playgroud)

javascript node.js promise superagent

4
推荐指数
1
解决办法
6288
查看次数

从响应中读取授权标头

我正在做一个副项目,我想在其中重用现有的 API。API 有一个/auth端点,用于处理 POST 请求emailpassword在请求正文中期望和。如果emailpassword得到验证,则服务器返回一个响应,其中包含一个Authorization标头,该标头包含应在所有后续请求中发送的令牌的值。

我在从响应中检索此标头时遇到问题。它在 Postman 和 Chrome Dev Tools(网络部分)中都可见。 邮差 Chrome 开发工具: XMLHttpRequest console.log 响应头的 在此处输入图片说明

我已经尝试了多个库/实现来发送请求(superagentrequestfetch实现甚至XMLHttpRequest),但是,Authorization当我在 Chrome 开发工具中查看它们时,我得到的所有响应都在响应头中包含标头,但是当我尝试访问时来自javascript的标题,我总是最终Content-Type只得到标题。

我在其他几个答案中读到服务器必须在标头中指定Access-Control-Expose-HeadersorAccess-Control-Allow-HeadersAuthorization值,但是,我无权访问服务器,并且 API 上没有与此问题相关的问题,所以我的猜测是发送请求时我遗漏了一些东西。

有任何想法吗?

这是使用的请求 fetch

return fetch(endpoint, {
    method: 'post',
    body: data,
    headers: {
      [API_KEY_HEADER]: apiKey
    }
  }).then(r => {
    console.log(r);
    console.log(r.headers)
  });
Run Code Online (Sandbox Code Playgroud)

这是使用的请求 request

r({
    url: endpoint,
    method: 'post',
    headers: …
Run Code Online (Sandbox Code Playgroud)

authorization http request fetch superagent

4
推荐指数
1
解决办法
6949
查看次数

reactjs - 中断超级代理中的发布请求

我正在尝试计算文件上传的进度,所以我使用的是Superagent。我能够获得文件上传的进度。

现在,当用户选择取消按钮时,我需要中断或取消发布请求。有没有办法做到这一点。以下是我的代码:

var file = somefile.pdf
Request.post('http://posttestserver.com/post.php?dir=example')
  .set("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
  .send(file)
  .on('progress', function(e) {
    console.log('Progress', e.percent);
  })
  .end((err, res) => {
      console.log(err);
      console.log(res);
  })
Run Code Online (Sandbox Code Playgroud)

javascript superagent reactjs

4
推荐指数
2
解决办法
3034
查看次数

如何使用 Jest 和 Supertest 在每次测试之间清除 cookie?

我有一套测试,如果单独运行,它们都会通过。但是,如果并行运行,测试会由于检查 cookie 的值而失败。

问题是 supertest 的 cookie 在每次测试之间都不会被清除。

有没有办法使用 supertest 在每次测试之间清除 cookie?这与这个未提供解决方案的未解决问题有关。

我都尝试过:

afterEach(() => {
  request(app)
    .set('Cookie', [])
})
Run Code Online (Sandbox Code Playgroud)

和:

afterEach(() => {
  request(app)
    .set('Cookie', '')
})
Run Code Online (Sandbox Code Playgroud)

...没有用。

以下是单独运行良好但并行运行时失败的两个测试:

test('It should respond 302 to the wrong url', (done) => {
  const accessiblePages = {get_member_accessible_pages: []}
  nock('http://localhost:8000')
    .log(console.log)
    .get('/auth/me/')
    .reply(200, accessiblePages)
  // Must use j: to work with cookie parser
  const cookie = 'userInfo=j:' + encodeURIComponent(
    JSON.stringify(accessiblePages))
  request(app)
    .get('/first-url')
    .set('Cookie', cookie)
    .expect(302)
    .expect('Location', '/new-url')
    .then((response) => {
      expect(response.statusCode).toBe(302) …
Run Code Online (Sandbox Code Playgroud)

superagent supertest reactjs jestjs

4
推荐指数
1
解决办法
8465
查看次数

有什么方法可以在使用等待时获得 4xx 响应正文而不尝试...捕获?

async function checkToken(token) {
  const result = await superagent
    .post(`${config.serviceUrl}/check_token`)
    .send({token});
  return result.body;
}
Run Code Online (Sandbox Code Playgroud)

如果此调用返回 401,则默认选项会引发异常,这不是我所期望的。我调用的 API 也使用 HTTP 状态消息作为正文来返回信息,我只需要正文部分。

http 状态 401 的响应是

{
    "data": null,
    "error": {
        "code": "INVALID_TOKEN",
        "message": "Token is not valid"
    }
}
Run Code Online (Sandbox Code Playgroud)

目前,为了得到这个,我需要用 try...catch 包装所有超级代理调用

async function checkToken(token) {
  let result = null;
  try {
    result = await superagent
      .post(`${config.serviceUrl}/check_token`)
      .send({token});
  } catch (e) {
    result = e.response;
  }
  return result.body;
}
Run Code Online (Sandbox Code Playgroud)

有什么方法可以让第一个示例工作并返回 JSON 而不查看 HTTP 状态?

node.js superagent

3
推荐指数
1
解决办法
3120
查看次数