mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-12-20 15:30:39 +01:00
feat: migrating write-api skeleton into core
This commit is contained in:
@@ -11,7 +11,9 @@ const categories = require('../categories');
|
||||
const plugins = require('../plugins');
|
||||
const meta = require('../meta');
|
||||
const middleware = require('../middleware');
|
||||
const translator = require('../translator');
|
||||
|
||||
const isLanguageKey = /^\[\[[\w.\-_:]+]]$/;
|
||||
const helpers = module.exports;
|
||||
|
||||
helpers.noScriptErrors = async function (req, res, error, httpStatus) {
|
||||
@@ -342,4 +344,70 @@ helpers.getHomePageRoutes = async function (uid) {
|
||||
return data.routes;
|
||||
};
|
||||
|
||||
helpers.formatApiResponse = async (statusCode, res, payload) => {
|
||||
if (statusCode === 200) {
|
||||
res.status(200).json({
|
||||
status: {
|
||||
code: 'ok',
|
||||
message: 'OK',
|
||||
},
|
||||
response: payload || {},
|
||||
});
|
||||
} else if (!payload) {
|
||||
// Non-2xx statusCode, generate predefined error
|
||||
res.status(statusCode).json(helpers.generateError(statusCode));
|
||||
} else if (payload instanceof Error) {
|
||||
if (isLanguageKey.test(payload.message)) {
|
||||
const translated = await translator.translate(payload.message, 'en-GB');
|
||||
res.status(statusCode).json(helpers.generateError(statusCode, translated));
|
||||
} else {
|
||||
res.status(statusCode).json(helpers.generateError(statusCode, payload.message));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
helpers.generateError = (statusCode, message) => {
|
||||
var payload = {
|
||||
status: {
|
||||
code: 'internal-server-error',
|
||||
message: 'An unexpected error was encountered while attempting to service your request.',
|
||||
},
|
||||
response: {},
|
||||
};
|
||||
|
||||
// Need to turn all these into translation strings
|
||||
switch (statusCode) {
|
||||
case 400:
|
||||
payload.status.code = 'bad-request';
|
||||
payload.status.message = message || 'Something was wrong with the request payload you passed in.';
|
||||
break;
|
||||
|
||||
case 401:
|
||||
payload.status.code = 'not-authorised';
|
||||
payload.status.message = 'A valid login session was not found. Please log in and try again.';
|
||||
break;
|
||||
|
||||
case 403:
|
||||
payload.status.code = 'forbidden';
|
||||
payload.status.message = 'You are not authorised to make this call';
|
||||
break;
|
||||
|
||||
case 404:
|
||||
payload.status.code = 'not-found';
|
||||
payload.status.message = 'Invalid API call';
|
||||
break;
|
||||
|
||||
case 426:
|
||||
payload.status.code = 'upgrade-required';
|
||||
payload.status.message = 'HTTPS is required for requests to the write api, please re-send your request via HTTPS';
|
||||
break;
|
||||
|
||||
case 500:
|
||||
payload.status.code = 'internal-server-error';
|
||||
payload.status.message = message || payload.status.message;
|
||||
}
|
||||
|
||||
return payload;
|
||||
};
|
||||
|
||||
require('../promisify')(helpers);
|
||||
|
||||
Reference in New Issue
Block a user