我正在尝试启动Web服务器并在一个node.js文件中测试http请求/响应。
服务器正在运行,我可以在浏览器中使用ip'http://127.0.0.1:8080'打开它。
我还可以在终端中运行'curl http://127.0.0.1:8080'并获得响应。
但是,当我尝试运行js脚本时,输出显示连接被拒绝。为什么会发生,如何解决此问题?
const { exec } = require('child_process');
const testDirectory = 'testDirectory';
const demoDirectory = 'packages/my-react-component';
console.log('start server');
yarnRun = exec('yarn run start:demo', {
cwd: process.cwd().toString() + '/' + testDirectory + '/' + demoDirectory + '/',
});
process.stdin.resume(); // I want my server keep alive
const localhost = 'http://127.0.0.1:8080';
getRequestTest = exec('curl ' + localhost);
getRequestTest.stdout.on('data', function(data)){
console.log('stdout: ', data.toString())
}
getRequestTest.stderr.on('data', function(data)){
console.log('stderr: ', data.toString())
}
js文件中curl执行的输出是:
Failed to connect to 127.0.0.1 port 8080: Connection refused
这是'curl http://127.0.0.1:8080 -v'的输出
stderr: * Rebuilt URL to: http://127.0.0.1:8080/
stderr: % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
stderr: * Trying 127.0.0.1...
* TCP_NODELAY set
stderr: * Connection failed
* connect to 127.0.0.1 port 8080 failed: Connection refused
* Failed to connect to 127.0.0.1 port 8080: Connection refused
* Closing connection 0
curl: (7) Failed to connect to 127.0.0.1 port 8080: Connection refused
答案 0 :(得分:0)
尝试将0.0.0.0安装为127.0.0.1,这对于localhost和ip均适用。
答案 1 :(得分:0)
我发现问题是当我用代码启动服务器时,它立即执行了“ curl”。同时,服务器尚未启动。因此我得到了这样的连接被拒绝错误。
我试图在'curl'上设置setTimeout 5秒钟,cmd成功给了我http响应。
但是我认为代码看起来很难看。有没有更好的书写方式?
startServer = exec('node ' + process.cwd().toString() + '/script/startServer.js');
const localhost = 'http://127.0.0.1:8080';
console.log('localhost: ' + localhost);
function testRequest() {
console.log('run curl ' + localhost + ' -v');
getRequestTest = exec('curl ' + localhost + ' -v');
getRequestTest.stdout.on('data', function(data) {
console.log('stdout: ' + data.toString());
});
getRequestTest.stderr.on('data', function(data) {
console.log('stderr: ' + data.toString());
});
}
setTimeout(testRequest, 5000);