这是一个棘手的问题;我无法确切地指出我的问题来自哪里,但我已经在mac和windows上重现了。
我有一个与webpack捆绑在一起的Angular 2站点,它通过节点为我的开发环境使用快速服务器。我的网站会加载,但有一次会有一个json文件/docs/package.json
的http get请求挂起' pending'。它永远不会通过,最终会失败而没有错误。
有趣的事情:
我的所有同事都让该项目在同一次提交中工作。
Angular会在拨打电话之前立即触发console.log
,但它永远不会到达回叫。因此,我已经排除了Angular作为根本原因,因为在网络面板中,请求发生但响应永远不会到来。
相关的代码段是:
init() {
this.onReadyPromise = new Promise((resolve, reject)=> {
console.log('This log will fire');
this.http.get(`${this.constants['BASE_RESOURCES_PATH']}/${this.constants['JSON_FILE_NAME']}`)
.map(res => res.json())
.subscribe(
console.log('This log will NOT fire');
response => {
this.parseDocsJson(response)
.then(()=> resolve(this.docs));
},
err => reject(err)
);
});
return this.onReadyPromise;
}
/etc/hosts
以查看别名localhost是否有帮助。没用。5.8.0
,5.10.0
和6.3.0
上尝试了这一点,所有版本都是多个同事尝试并成功完成的。没用。我怀疑这是node / express的一个问题,因为webpack似乎捆绑了python版本完全正常,而Angular也可以通过python服务器工作。
我希望我能为所有可能提供帮助的人提供有关我的服务器配置的更多信息,但这是我现在所拥有的:
server.dev.js:
const express = require('express');
const webpack = require('webpack');
const WebpackDevServer = require('webpack-dev-server');
const config = require('./webpack.dev');
const helpers = require('./helpers');
const HOST = '0.0.0.0';
const PORT = 3000;
/**
* Webpack Development Server configuration
* Description: The webpack-dev-server is a little node.js Express server.
* The server emits information about the compilation state to the client,
* which reacts to those events.
*
* See: https://webpack.github.io/docs/webpack-dev-server.html
*/
const webpackDevServerOptions = {
historyApiFallback: true,
watchOptions: {
aggregateTimeout: 300,
poll: 1000
},
stats: {
colors: true,
errorDetails: true,
cached: true,
chunks: false
},
contentBase: helpers.root('src'),
outputPath: helpers.root('dist'),
proxy: {
'/docs/**/*.html': {
secure: false,
bypass: function (req, res, proxyOptions) {
if (req.headers.accept.indexOf('html') !== -1) {
return '/index.html';
}
}
}
}
};
var app = new WebpackDevServer(webpack(config), webpackDevServerOptions);
app.use('/docs/', express.static(helpers.root('../docs/')));
app.listen(PORT, HOST, function (err) {
if (err) {
throw err;
}
console.info(`Listening at http://${HOST}:${PORT}`);
});
更新
webpackDevServerOptions
proxy
导致问题。出于某种原因,每个请求都会触发正面。如果我在旁路功能中放置console.log
,则会在以/docs/
开头的所有请求中错误地触发。
我仍然不确定为什么globbing机制正在解析这个错误,但是一旦我发现它就会发回...
答案 0 :(得分:0)
要回答我自己的问题,由于某种原因,节点通配符合/docs/
的所有请求,无论它们是否包含.html扩展名,包括package.json。
由于我无法弄清楚为什么globbing在我的机器上出现故障,因此绑带修复是在旁路功能中if
子句失败时返回请求URL:
proxy: {
'/docs/**/*.html': {
secure: false,
bypass: function (req, res, proxyOptions) {
if (req.headers.accept.indexOf('html') !== -1) {
return '/index.html';
}
return req.url;
}
}
}
注意:我不喜欢。我更确切地说具有通配功能......我不知道我在网站的其他地方发现了什么,并且#34;修复"。如果有人对全球问题有所了解,我非常乐意将不同的答案标记为正确。但在那之前,就是这样。