nodejs:async nano / express无法正常工作的多个GET请求

时间:2017-12-28 21:10:01

标签: node.js express async-await couchdb couchdb-nano

我有一个关于node.js和express的超级转换错误,这让我疯了两天了。

我想在我的网络应用上显示一系列图片。因此,我正在从客户端向我的快速API发送GET请求,然后应该传递图像。

每页只有一张图片,效果很好。

然而,如果我想要显示一系列图像,让我们说8张图片,只有最后的图像才会被渲染!但是顺序改变了,有时它是倒数第二个有效的图像,它以完全随机的顺序被洗牌!

但它不仅是图像的问题 - 它与ALL(异步)请求的行为相同! 例如,如果我想将一些用户名呈现给iframe,我只会获取最后一个iframe的数据,其他所有用户都会显示404错误且无法获取。

这是我在前端的代码:

<iframe src="http://127.0.0.1:3000/files/bigThumb/file-version-2017-12-27T11-53-45-647Z-3DnsDX?projectdb=cdu_regierung&companydb=cdu&authsession=supersecrettoken"></iframe>
<iframe src="http://127.0.0.1:3000/files/bigThumb/file-version-2017-12-27T13-08-58-189Z-q52KKd?projectdb=cdu_regierung&companydb=cdu&authsession=supersecrettoken"></iframe> 
<iframe src="http://127.0.0.1:3000/files/bigThumb/file-version-2017-12-27T13-08-58-189Z-q52KKd?projectdb=cdu_regierung&companydb=cdu&authsession=supersecrettoken"></iframe> 
<iframe src="http://127.0.0.1:3000/files/bigThumb/file-version-2017-12-27T13-08-58-189Z-q52KKd?projectdb=cdu_regierung&companydb=cdu&authsession=supersecrettoken"></iframe> 

   

这是我在服务器端的代码

app.all('/files/:action/:versionId',  async function(req, res) {

try {
	
    var projectName = req.query.projectdb;
    var companyName = req.query.companydb;
    var authSession =  req.query.authsession;
		
    var nano = _nano({url: 'http://127.0.0.1:5984/',  cors: true, cookie: 'AuthSession='+ authSession});
		
    var session = await nano.session();
    session = session[0];
    var username = session.userCtx.name;
		
    res.send(username);
	
  } catch(err) {
    return res.status(401).send(err);
  }

})

我的猜测是它与

中的ASYNC功能有关
app.all('/files/:action/:versionId',  async function(req, res) {

因为我从未遇到过标准同步功能(req,res)

的问题

我做错了什么?

EDIT 我在下面的代码中遇到了同样的问题。

app.all('/files/:action/:versionId', function(req, res) {
    request('https://jsonplaceholder.typicode.com/posts/1', function (error, response, body) {
        res.send(body);
});

它与1 GET完美配合,但不能同时支持8个GET请求。另外,我在日志中收到此错误:

_http_outgoing.js:494
throw new Error('Can\'t set headers after they are sent.');

Error: Can't set headers after they are sent.
at validateHeader (_http_outgoing.js:494:11)

1 个答案:

答案 0 :(得分:0)

我找到了解决方案 - 这是由nodejs中间件&#34; express-formidable&#34;引起的错误。这里讨论的问题。 https://github.com/utatti/express-formidable/issues/6

只需使用&#34;强大的&#34;中间件,你很高兴。 这是我最终得到的代码。

&#13;
&#13;
var formidable = require('formidable');

// init formidable middleware
app.use(function (req, res, next) {
	var form = new formidable.IncomingForm({
		encoding: 'utf-8',
		multiples: false,
		keepExtensions: true,
	})
	form.once('error', console.log)
	form.parse(req, function (err, fields, files) {
		Object.assign(req, {fields, files});
		next();
	})
});
&#13;
&#13;
&#13;