@tjc-group/odata-v2-server v0.0.71
This is a downgrade from odata-v4-server.
We need to provide OData V2 metadata and response payload Please be advised that this is in alfa status.
Added method parameter decorators:
- @odata.path: OData resource path parsing tree
- @odata.navstep: Current navigation step
Now controller methods are called with controller instance (not controller class descriptor)
$batch requests implemented, though no callbacks yet for start and end of changsets
OData V2 payload can be switched off via ODataProcessorOptions class
Please see below the original README of JayStack odata-v4-server
JayStack OData V4 Server
OData V4 server for node.js
Features
- OASIS Standard OData Version 4.0 server
- usable as a standalone server, as an Express router, as a node.js stream or as a library
- expose service document and service metadata - $metadata
- setup metadata using decorators or metadata JSON
- supported data types are Edm primitives, complex types, navigation properties
- support create, read, update, and delete entity sets, action imports, function imports, collection and entity bound actions and functions
- support for full OData query language using odata-v4-parser
- filtering entities - $filter
- sorting - $orderby
- paging - $skip and $top
- projection of entities - $select
- expanding entities - $expand
- $count
- support sync and async controller functions
- support async controller functions using Promise, async/await or ES6 generator functions
- support result streaming
- support media entities
Controller and server functions parameter injection decorators
- @odata.key
- @odata.filter
- @odata.query
- @odata.context
- @odata.body
- @odata.result
- @odata.stream
Example Northwind server
export class ProductsController extends ODataController{
@odata.GET
find(@odata.filter filter:ODataQuery){
if (filter) return products.filter(createFilter(filter));
return products;
}
@odata.GET
findOne(@odata.key key:string){
return products.filter(product => product._id == key)[0];
}
@odata.POST
insert(@odata.body product:any){
product._id = new ObjectID().toString();
products.push(product);
return product;
}
@odata.PATCH
update(@odata.key key:string, @odata.body delta:any){
let product = products.filter(product => product._id == key)[0];
for (let prop in delta){
product[prop] = delta[prop];
}
}
@odata.DELETE
remove(@odata.key key:string){
products.splice(products.indexOf(products.filter(product => product._id == key)[0]), 1);
}
}
export class CategoriesController extends ODataController{
@odata.GET
find(@odata.filter filter:ODataQuery){
if (filter) return categories.filter(createFilter(filter));
return categories;
}
@odata.GET
findOne(@odata.key key:string){
return categories.filter(category => category._id == key)[0];
}
@odata.POST
insert(@odata.body category:any){
category._id = new ObjectID().toString();
categories.push(category);
return category;
}
@odata.PATCH
update(@odata.key key:string, @odata.body delta:any){
let category = categories.filter(category => category._id == key)[0];
for (let prop in delta){
category[prop] = delta[prop];
}
}
@odata.DELETE
remove(@odata.key key:string){
categories.splice(categories.indexOf(categories.filter(category => category._id == key)[0]), 1);
}
}
@odata.cors
@odata.controller(ProductsController, true)
@odata.controller(CategoriesController, true)
export class NorthwindODataServer extends ODataServer{}
NorthwindODataServer.create("/odata", 3000);
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago