所以大约一个月前我问了一个关于superagent和发送文件的问题,但根本没有回复.我仍然想知道如何做到这一点,因为我喜欢使用superagent.
我可以使用普通的ajax发送文件:
var fd = new FormData();
fd.append( 'file', this.refs.File.getDOMNode().files[0] );
$.ajax({
url: 'http://localhost:8080/files',
data: fd,
processData: false,
contentType: false,
type: 'POST',
success: function(data){
console.log(data)
}
});
Run Code Online (Sandbox Code Playgroud)
但是当我在superagent中尝试同样的事情时,没有任何作用:
var fd = new FormData();
fd.append( 'file', this.refs.File.getDOMNode().files[0] );
Request.post('http://localhost:8080/files')
.set('Content-Type', false)
.set('Process-Data', false)
.attach('file', fd, 'file')
.end((err, res) => {
console.log(err);
console.log(res);
})
Run Code Online (Sandbox Code Playgroud)
任何人,请告诉我发生了什么事.
我正在尝试使用gatsbyjs将我的react应用程序构建到静态html页面中。我刚刚尝试了“ gatsby build”,它经历了所有的事情,直到它想要创建静态页面,然后我得到:
error Building static HTML for pages failed
See our docs page on debugging HTML builds for help
1 | if (global.GENTLY) require = GENTLY.hijack(require); 2 |
> 3 | var crypto = require('crypto');
| ^ 4 | var fs = require('fs'); 5 | var util = require('util'), 6 | path = require('path'),
WebpackError: require is not a function
- incoming_form.js:3 Object.map../file
~/formidable/lib/incoming_form.js:3:1
- index.js:1 Object.<anonymous>
~/formidable/lib/index.js:1:1
- index.js:8 Object.<anonymous>
~/superagent/lib/node/index.js:8:1
- contact.js:3 Object.<anonymous>
src/pages/contact.js:3:1
- sync-requires.js:8 Object.exports.__esModule …Run Code Online (Sandbox Code Playgroud) 我正在学习JavaScript,并且可以看到在多个大型项目中,SuperAgent用于HTTP请求。我将Axios用于学习目的,但想知道是什么使SuperAgent与Axios不同?
我正在运行一个node.js服务器A,它使用superagent向另一台服务器B发出HTTP请求.
我调查了服务器B上的请求,看到了标题connection正在close和httpVersion 1.1:
var http = require('http');
var request = require('superagent');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write('req.httpVersion seen on server:' + req.httpVersion);
res.write('\nreq.headers.connection seen on server:' + req.headers.connection);
res.end();
}).listen(1337, '0.0.0.0');
request
.get('localhost:1337/helloword')
.end(function (err, res) {
console.log(res.text);
});
Run Code Online (Sandbox Code Playgroud)
这导致:
req.httpVersion seen on server:1.1
req.headers.connection seen on server:close
Run Code Online (Sandbox Code Playgroud)
但是,如果我从浏览器访问同一台服务器,我得到:
req.httpVersion seen on server:1.1
req.headers.connection seen on server:keep-alive
Run Code Online (Sandbox Code Playgroud)
从 http://tools.ietf.org/html/rfc2616#page-172我了解到这keep-alive是HTTP 1.1的默认值,除非另有声明Connection: close.
所以,我的问题是:
我试图利用superagent和cheerio从kijiji抓取数据进行学习,而我收到了"无法读取未定义的属性'父级'的错误".(我试过craigslist很好).它发生在我得到正确的结果"对象"之后.cheerio似乎有些不对劲.有没有人对此有任何想法?提前感谢您的帮助.
[ERROR] 17:30:24 TypeError
TypeError: Cannot read property 'parent' of undefined
at Function.exports.update (C:\Users\zhi_xie\nodejs\neomovie\node_modules\ch
eerio\lib\parse.js:55:25)
at module.exports (C:\Users\zhi_xie\nodejs\neomovie\node_modules\cheerio\lib
\parse.js:17:11)
at Function.exports.load (C:\Users\zhi_xie\nodejs\neomovie\node_modules\chee
rio\lib\static.js:19:14)
at C:\Users\zhi_xie\nodejs\neomovie\routes\crawlerusers.js:35:27
at Request.callback (C:\Users\zhi_xie\nodejs\neomovie\node_modules\superagen
t\lib\node\index.js:746:30)
at Request.<anonymous> (C:\Users\zhi_xie\nodejs\neomovie\node_modules\supera
gent\lib\node\index.js:135:10)
at Request.emit (events.js:95:17)
at ClientRequest.<anonymous> (C:\Users\zhi_xie\nodejs\neomovie\node_modules\
superagent\lib\node\index.js:921:12)
at ClientRequest.emit (events.js:95:17)
at HTTPParser.parserOnIncomingClient [as onIncoming] (http.js:1692:21)
Run Code Online (Sandbox Code Playgroud)
这是代码:
var superagent = require('superagent');
var cheerio = require('cheerio');
var url = require('url');
var kijijiUrl = 'http://www.kijiji.ca/b-immobilier/ville-de-montreal/c34l1700281?ad=wanted';
superagent.get(kijijiUrl).end(function (err, res) {
if (err) {
return console.error(err);
}
var topicUrls = [];
var …Run Code Online (Sandbox Code Playgroud) 快递-v:4.13.3
Superagent -v:1.4
函数从我的应用程序的前端发送POST请求:
search: () => {
request.post('/api/search')
.set('Content-Type', 'application/json')
.send({hello: 'hello w'})
.end((err, response) => {
if (err) return console.error(err);
serveractions.receiveTest(response);
});
}
Run Code Online (Sandbox Code Playgroud)
我的快递路由器文件:
var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser');
router.use(bodyParser.urlencoded({extended: false}));
router.post('/api/search', (req, res, next) => {
console.log(req.body);
res.json({test: 'post received'});
});
module.exports = router;
Run Code Online (Sandbox Code Playgroud)
路由器成功发送和接收请求,但即使我正在.send({hello: 'hello w'})使用Superagent ,req.body仍然是空的.为了正确发送json对象并在路由器中接收它,我需要更改什么?
尝试更改组件的状态时出错.
未捕获的TypeError:无法读取未定义的属性"setState"
constructor(props){
super(props);
this.state={
r:'',
message:''
};
this.setStateMessage = this.setStateMessage.bind(this);
}
setStateMessage (e){
e.preventDefault();
var test = this.state.message;
request
.post('http://127.0.0.1:5000/api/db')
.send({message: this.state.message})
.accept('application/json')
.withCredentials()
.end(function(err, res){
if(err)
throw err;
this.setState({ r: res.body.message });
});
}
render() {
return (
<div>
<div className='response'>
{this.state.r}
</div>
//form with input
</div>
)}
Run Code Online (Sandbox Code Playgroud) 我在这里的语法中缺少某些内容,但不确定是什么:
我正在努力解决这个问题。但是我明白了expected undefined to equal 'pXVCJ9.eyJpYXQ'
Test.js
describe('User API', () => {
let email, password, requestBody
beforeEach(() => {
email = 'someperson@gmail.com'
password = 'password'
requestBody = {
session: '05833a20-4035',
token: 'pXVCJ9.eyJpYXQ' }
nock('https://someurl/')
.get('users/sessions')
.reply(200, requestBody)
})
it('returns user session for login', async () => {
const data = await UserApi.login(email, password)
expect(data.token).to.equal(requestBody.token)
expect(data.session).to.equal(requestBody.session)
})
})
Run Code Online (Sandbox Code Playgroud)
UserApi.js
import request from 'superagent'
export const endpoint = 'https://someurl/'
const login = (email, password) => async () => {
try { …Run Code Online (Sandbox Code Playgroud) 阅读Superagent文档,没有区分 POST 和 PUT 请求:
request.post('/user')
.set('Content-Type', 'application/json')
.send('{"name":"tj","pet":"tobi"}')
.end(callback)
Run Code Online (Sandbox Code Playgroud)
如何使用这个包做 PUT 请求?
superagent ×9
javascript ×4
node.js ×4
reactjs ×2
ajax ×1
async-await ×1
asynchronous ×1
axios ×1
cheerio ×1
ecmascript-6 ×1
express ×1
form-data ×1
gatsby ×1
http ×1
keep-alive ×1
post ×1
put ×1
router ×1
webpack ×1