该脚本的目的是继续重试连接到服务器端点并尽可能生成graphql架构。
如果我在另一个命令提示符下运行它,该脚本可以正常工作。我只想在一个命令提示符下运行一个命令。
相反,我收到错误:
(node:4212)MaxListenersExceededWarning:检测到可能的EventEmitter内存泄漏。 11名最终听众补充道。使用emitter.setMaxListeners()来增加限制
这对我来说没有任何意义,因为听众应该只设置一次,而不是11次......
dotnet-run
只运行asp.net服务器。显然这需要一些时间来启动,这就是为什么我写这个脚本以继续重试命中服务器。
"start": "npm-run-all --parallel dotnet-run get-schema:dev",
"get-schema:dev": "node scripts/getSchema.js --url http://localhost:8080/graphql"
我正在使用npm-run-all npm包
getSchema脚本:
require('isomorphic-fetch');
const getArgs = require('get-args');
const FormData = require('form-data');
const fs = require('fs');
const {
buildClientSchema,
introspectionQuery,
printSchema,
} = require('graphql/utilities');
const path = require('path');
const schemaPath = path.join(__dirname, '../schema/schema');
const formData = new FormData();
formData.append('query', introspectionQuery);
const args = getArgs();
const url = args.options.url;
let intervalId = null;
// Save JSON of full schema introspection for Babel Relay Plugin to use
const setSchema = () => {
fetch(url, {
method: 'post',
body: formData,
})
.then((res) => {
if (res.ok) {
return res.json();
}
throw new Error(res.statusText);
})
.then((schemaJSON) => {
fs.writeFileSync(
`${schemaPath}.json`,
JSON.stringify(schemaJSON, null, 2),
);
// Save user readable type system shorthand of schema
const graphQLSchema = buildClientSchema(schemaJSON.data);
fs.writeFileSync(
`${schemaPath}.graphql`,
printSchema(graphQLSchema),
);
clearInterval(intervalId);
console.log('Successfuly updated schema.');
})
.catch((error) => {
console.log(error);
});
};
intervalId = setInterval(setSchema, 1000);
在运行此脚本一段时间后,即使服务器已启动,我也会收到错误:
FetchError:对http://localhost:8080/graphql的请求失败,原因:socket挂断