gpt4 book ai didi

javascript - 在 bash 脚本中运行时 Node 进程崩溃

转载 作者:行者123 更新时间:2023-12-03 02:02:45 25 4
gpt4 key购买 nike

我正在为我的客户端服务器系统编写测试。服务器是一个正在运行和监听的 Node 进程,直到被杀死。
当我运行服务器,然后运行测试时,一切正常,并且测试通过。

我尝试编写一个运行服务器的bash脚本,然后才运行测试文件。结果就是服务器莫名其妙地被杀死了。

bash 脚本:

#!/usr/bin/env bash

output=$(mktemp "${TMPDIR:-/tmp/}$(basename 0).XXX")
node Server/Server --port 3300 &> $output &
server_pid=$!
echo "Initializing the server with pid: $server_pid . Wait:\n"
until grep -i 'Server is listening on ip ' $output
do
sleep 1
done

ps # here the server is running
npm run test
a=$?
ps # here the server is not running
kill -9 $server_pid
echo "Server killed"
exit $a

测试:

'use strict';
const cp = require('child_process');
const ip = require('my-local-ip');
const utils = require('../util/utils');

describe('Server and client connectivity:', () => {

it('should transfer index.html file to client', () => {
let basePath = __dirname.split('/');
basePath.pop();
basePath = basePath.join('/');

const clientPath = basePath + '/Client';

cp.execSync('node ' + clientPath + '/request', ['-t', ip(), '-p', 3300]);

expect(utils.isFileExistsInDirectory(clientPath, 'index.html')).toBe(true);
});

});

通过从测试中删除 execSync 命令,测试会失败,但服务器仍在后台运行。

怎么可能通过在脚本中运行服务器,execSync 杀死服务器,而当手动运行服务器然后测试时 - 一切正常?

编辑:
cat $output 的输出:

/Users/yinonc/Desktop/DDoSMitigation/server/Server.js:52
throw err;
^

Error: ENOENT: no such file or directory, open './index.html'

Server.js 文件的相关部分:

const server = http.createServer((req, res) => {
console.log(`${req.method} request for ${req.url}`);
console.log(req.connection.remoteAddress);
let fileName = req.url;
if (utils.isFileExistsInDirectory(__dirname, fileName)) {
if (_.includes(fileName, '.html')) {
fs.readFile(`./${fileName}`, (err, data) => {
if (err) {
throw err; // --------- this is line 52 ----------
}
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(data);
});
} else if (req.url.match(/.jpg$/)) {
const imgPath = path.join(__dirname, 'images', fileName);
const imgStream = fs.createReadStream(imgPath);

res.writeHead(200, {'Content-Type': 'image/jpeg'});

imgStream.pipe(res);
} else if (req.url.match(/.png$/)) {
const imgPath = path.join(__dirname, 'images', fileName);
const imgStream = fs.createReadStream(imgPath);

res.writeHead(200, {'Content-Type': 'image/png'});

imgStream.pipe(res);
}
} else {
fileName = cleaner.cleanFileName(fileName);
fs.writeFileSync(fileName, 'File Not Found. Please check your request.\n', err => {
if (err) {
throw err;
}
});
fs.readFile(`./${fileName}`, (err, data) => {
if (err) {
console.log("error 2");
throw err;
}
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(data);
});
}
});

最佳答案

您需要使用path.join修复相对路径。当您运行测试时,您的工作目录是运行测试的位置,这会导致相对路径中断。

const server = http.createServer((req, res) => {
console.log(`${req.method} request for ${req.url}`);
console.log(req.connection.remoteAddress);
let fileName = req.url;
if (utils.isFileExistsInDirectory(__dirname, fileName)) {
if (_.includes(fileName, '.html')) {
fs.readFile(path.join(__dirname, `./${fileName}`), (err, data) => {
if (err) {
throw err;
}
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(data);
});
} else if (req.url.match(/.jpg$/)) {
const imgPath = path.join(__dirname, 'images', fileName);
const imgStream = fs.createReadStream(imgPath);

res.writeHead(200, {'Content-Type': 'image/jpeg'});

imgStream.pipe(res);
} else if (req.url.match(/.png$/)) {
const imgPath = path.join(__dirname, 'images', fileName);
const imgStream = fs.createReadStream(imgPath);

res.writeHead(200, {'Content-Type': 'image/png'});

imgStream.pipe(res);
}
} else {
fileName = cleaner.cleanFileName(fileName);
fs.writeFileSync(fileName, 'File Not Found. Please check your request.\n', err => {
if (err) {
throw err;
}
});
fs.readFile(path.join(__dirname, `./${fileName}`), (err, data) => {
if (err) {
console.log("error 2");
throw err;
}
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(data);
});
}
});

关于javascript - 在 bash 脚本中运行时 Node 进程崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49938669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com