【发布时间】:2014-10-13 22:38:44
【问题描述】:
我正在使用 Gulp 开发由 Yeoman 的 gulp-angular 生成器生成的 Angular 应用程序。我已将其配置为将 /api 的请求代理到另一个端口,即我的 API 正在侦听的端口。该端口实际上是通过 SSH 隧道转发到外部服务器的。
这是我为自己的 API 编辑的 Yeoman 生成的配置:
gulp/server.js
'use strict';
var gulp = require('gulp');
var browserSync = require('browser-sync');
var httpProxy = require('http-proxy');
/* This configuration allow you to configure browser sync to proxy your backend */
var proxyTarget = 'http://localhost:3434/api'; // The location of your backend
var proxyApiPrefix = 'api'; // The element in the URL which differentiate between API request and static file request
var proxy = httpProxy.createProxyServer({
target: proxyTarget
});
function proxyMiddleware(req, res, next) {
if (req.url.indexOf(proxyApiPrefix) !== -1) {
proxy.web(req, res);
} else {
next();
}
// ...rest of config truncated
标准输出
[BS] Watching files...
/Users/jason/dev/web/node_modules/http-proxy/lib/http-proxy/index.js:114
throw err;
^
Error: Parse Error
at Socket.socketOnData (http.js:1583:20)
at TCP.onread (net.js:527:27)
当我的应用程序尝试访问特定的 API url 并返回 204 的响应时,我收到了上述错误。
url 结构: POST /api/resource/delete (API 不支持实际的 DELETE http 方法,所以我们 POST 到这个端点)
响应: 204 无内容
API 也在开发中,并通过内置的 PHP Web 服务器提供服务。服务器告诉我们的是客户端(在这种情况下也称为 Node,因为它是代理)在 PHP 发送响应之前就挂断了。
我想也许只是因为没有内容而窒息。因此,我们创建了第二个端点,它也返回 204 No Content,它似乎工作正常。但是,公平地说,这个问题似乎是断断续续的——有时有效,有时无效。这很混乱。
据我们所知,它只发生在这个删除 URL 上。我对 Node 很陌生,很难弄清楚问题是什么或去哪里找。有没有人有任何线索或以前有人见过这个?
【问题讨论】: