Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在bash脚本中运行时,节点进程崩溃_Javascript_Node.js_Bash_Jasmine - Fatal编程技术网

Javascript 在bash脚本中运行时,节点进程崩溃

Javascript 在bash脚本中运行时,节点进程崩溃,javascript,node.js,bash,jasmine,Javascript,Node.js,Bash,Jasmine,我正在为我的客户机-服务器系统编写一个测试。服务器是一个节点进程,它一直在运行和侦听,直到被终止。 当我运行服务器,然后运行测试时,一切正常,测试通过 我试图编写一个运行服务器的bash脚本,然后才运行测试文件。结果是服务器以某种方式被杀死 bash脚本: 测试: 'use strict'; const cp = require('child_process'); const ip = require('my-local-ip'); const utils = require('..

我正在为我的客户机-服务器系统编写一个测试。服务器是一个节点进程,它一直在运行和侦听,直到被终止。 当我运行服务器,然后运行测试时,一切正常,测试通过

我试图编写一个运行服务器的bash脚本,然后才运行测试文件。结果是服务器以某种方式被杀死

bash脚本:

测试:

'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$输出的输出:

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);
        });
    }
});

你能确认它确实会杀死服务器吗?或者只是在服务器继续运行时你的测试失败了吗?@BrahmaDev it显然会杀死服务器。这就是为什么我在npm运行测试后编写ps的原因——为了查看服务器是否正常运行,您是否可以添加cat$output的内容。@BrahmaDev是的,添加。
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);
        });
    }
});
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);
        });
    }
});