crude-server
Version:
69 lines (59 loc) • 1.5 kB
JavaScript
;
let {
executeAST,
checkAST,
parser
} = require('pfc-compiler');
/**
* using pfc grammer as a basic communication way
*/
module.exports = (contexter, variableStub) => {
return (req, res) => {
let context = contexter(req, res);
let handleChunk = parser();
return bodyChunk(req, (chunk) => {
if (chunk) {
handleChunk(chunk.toString());
}
}).then(() => {
let ast = handleChunk(null);
if (variableStub) {
checkAST(ast, {
variableStub
});
}
return executeAST(ast, context, {
variableStub
});
}).then((result) => {
res.end(JSON.stringify({
errno: 0,
bridge: 'pfc',
data: result
}));
}).catch((err) => {
res.end(JSON.stringify({
errno: -1,
bridge: 'pfc',
errMsg: err.toString()
}));
});
};
};
let bodyChunk = (req, onChunk) => {
return new Promise((resolve, reject) => {
req.on('data', (chunk) => {
try {
onChunk && onChunk(chunk);
} catch (err) {
reject(err);
}
});
req.on('end', () => {
resolve();
});
req.on('error', () => {
reject();
});
});
};