Security News
JSR Working Group Kicks Off with Ambitious Roadmap and Plans for Open Governance
At its inaugural meeting, the JSR Working Group outlined plans for an open governance model and a roadmap to enhance JavaScript package management.
A simple ajax call formatter between server and client (built in es6 and compiled in es5 with babel)
It requires Express installed in your project!
This is the server module, a client module (for Angularjs) can be found here: Ajax-interceptor
npm install ajax-call
app.get('/api/v1/users/:id', function(req, res) {
var ajaxCall = require('ajax-call').AjaxCallFactory();
db.collection('users').findOne({_id: req.params.id}, function(err, doc) {
if(err)
return ajaxCall.sendUnhandledExceptionMessage(res, err);
if(doc == null)
return ajaxCall.sendErrorMessage(res, 404, 'User not found');
return ajaxCall.sendValue(res, doc);
});
});
The module ajax-call has four models of formatters:
It is the main model, from which all other models inherit.
Returns the following structure:
{
code: 0, // a code of request
success: true, // if the request was successful
result: 0, // a result of request
message: 'message', // an optional message
value: {} // the payload of the response from the server
}
res
is the express res
object.
This method sends the payload in response, through the method json
object res
to express.
res
is the express res
object.value
is the value
property sent in payloadstatusCode
optional is the status code of the response. If not set, set the status code to 200
, 204
if value
is empty objectSend the payload in response, setting the 'value' with the argument passed to the method.
res
is the express res
object.result
is the number of the error type This will be set as the response statusCodemessage
is the message of the errorSend an error message to the client, setting the statusCode response.
res
is the express res
object.err
is the error objectSend an error message to the client, not caught by the server.
The statusCode response will be automatically set as 500
.
The message will automatically be set as UncaughtException
.
It also launched a log with status fatal
(see section log)
res
is the express res
object.err
is the error objectSend an error message to the client, not handled by the server.
The statusCode response will be automatically set as 501
.
The message will automatically be set as UnhandledException
.
It also launched a log with status error
(see section log)
It adds an array of items to the response.
app.get('/api/v1/users', function(req, res) {
var ajaxList = require('ajax-call').AjaxListFactory();
db.collection('users').find().toArray(function(err, docs) {
if(err)
return ajaxList.sendUnhandledExceptionMessage(res, err);
if(docs == null)
return ajaxList.sendValue(res, {});
for(var i = 0, length = docs.length; i < length; i++) {
var user = docs[i];
delete user.password;
ajaxList.addItem(user);
}
// use sendValue method for append other values
return ajaxList.sendValue(res, 'users of my application');
});
});
Returns the following structure:
{
code: 0, // a code of request
success: true, // if the request was successful
result: 0, // a result of request
message: 'message', // an optional message
value: {}, // the payload of the response from the server
items: [], // the collection of items
uniqueItems: [] // *optional* the collection of **unique** items
}
item
is the value pushed into array items
Add an element into array items
items
are n ° arguments passed to this method that are concatenated to the element items
sent in the responseAn example can be found in tests
uniqueItem
is the value added into Set uniqueItems
Being 'uniqueItems' an instance of Set, the elements will be unique inside.
Pay attention to objects:
var a = {a: 1}, b = {a: 1};
a !== b // is true!
It formats the response by grouping errors for field
app.post('/api/v1/users', function(req, res) {
var ajaxFormCall = require('ajax-call').AjaxFormCallFactory();
var fields = req.body;
// validate data from req.body ex:
if(fields.name == null || typeof fields.name !== 'string') {
ajaxFormCall.addError('name', 'name fields is required');
} else if(fields.name.length < 1 || fields.name.length > 30) {
ajaxFormCall.addError('name', 'field name must be length between 1 and 30 characters');
}
if(fields.surname == null || typeof fields.surname !== 'string') {
ajaxFormCall.addError('surname', 'surname fields is required');
} else if(fields.surname.length < 1 || fields.surname.length > 30) {
ajaxFormCall.addError('surname', 'field surname must be length between 1 and 30 characters');
}
// etc..
if(ajaxFormCall.hasError())
return ajaxFormCall.sendErrorMessage(res, 403, 'form not valid');
db.collection('users').insert(fields, function(err, doc) {
if(err)
return ajaxList.sendUnhandledExceptionMessage(res, err);
// use sendValue method for append other values
return ajaxList.sendValue(res, 'form valid!');
// in alternative use send method if you don't send any values
return ajaxList.send(res);
});
});
Returns the following structure:
{
code: 0, // a code of request
success: true, // if the request was successful
result: 0, // a result of request
message: 'message', // an optional message
value: {}, // the payload of the response from the server
errrors: {}, // the collection of errors
countErrors: 0 // the number of errors
}
An example of response with errors can be found in tests
name
is the name of fielderror
is the error messageAdd an error in the errors
object
Return true if countErrors
> 0
This model inherits from AjaxList
It formats the response by entering information relevant to pagination.
app.get('/api/v1/users', function(req, res) {
// you can initialize pagination info now or using reInit method
var ajaxDataGrid = require('ajax-call').AjaxDataGridFactory(
totalItems, req.body.currentPage, totalPages, req.body.itemsPerPage
});
db.collection('users').find().toArray(function(err, docs) {
if(err)
return ajaxDataGrid.sendUnhandledExceptionMessage(res, err);
if(docs == null)
return ajaxDataGrid.sendValue(res, {});
for(var i = 0, length = docs.length; i < length; i++) {
var user = docs[i];
delete user.password;
ajaxDataGrid.addItem(user);
}
ajaxDataGrid.reInit(
totalItems, req.body.currentPage, totalPages, req.body.itemsPerPage
);
// use sendValue method for append other values
return ajaxList.sendValue(res, 'users of my application with pagination');
});
});
Returns the following structure:
{
code: 0, // a code of request
success: true, // if the request was successful
result: 0, // a result of request
message: 'message', // an optional message
value: {}, // the payload of the response from the server
items: [], // the collection of items
uniqueItems: [], // *optional* the collection of **unique** items
totalItems: 0, // the total items for pagination
currentPage: 1, // the current page
totalPages: 0, // total number of pages
itemsPerPage: 10 // number of items per page
}
You can configure a itemsPerPage
default number. See section config for more details.
totalItems
is the total items for paginationcurrentPage
is the current pagetotalPages
is the total number of pagesitemsPerPage
is number of items per page (default config.resultsPerPageDefault)Re-init information relevant to pagination.
You can configure a itemsPerPage
default number and max number with global config.
Default number setted are:
var ajaxCallConfig = require('ajax-call').config;
ajaxCallConfig.resultsPerPageDefault = 20;
ajaxCallConfig.resultsPerPageMax = 50;
You can set the logging system used by the module when methods are called sendUncaughtExceptionMessage
and sendUnhandledExceptionMessage
For example log4js
By default, the module will use console
var log4js = require('log4js');
log4js.configure({}); // config log4js
var logger = log4js.getLogger('main');
var ajaxCallLogger = require('ajax-call');
ajaxCallLogger.setLogger(logger);
FAQs
A simple ajax call formatter between server and client
We found that ajax-call demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
At its inaugural meeting, the JSR Working Group outlined plans for an open governance model and a roadmap to enhance JavaScript package management.
Security News
Research
An advanced npm supply chain attack is leveraging Ethereum smart contracts for decentralized, persistent malware control, evading traditional defenses.
Security News
Research
Attackers are impersonating Sindre Sorhus on npm with a fake 'chalk-node' package containing a malicious backdoor to compromise developers' projects.