Security News
npm Updates Search Experience with New Objective Sorting Options
npm has a revamped search experience with new, more transparent sorting options—Relevance, Downloads, Dependents, and Publish Date.
Oils is a web framework built on top of Express framework. It's very flexible and very simple to use, you'll love it!
The reason why Oils framework was created is because the author wants a framework that just works; framework that is very close to Express, organized, highly intuitive and uses basic html, css, and javascript.
The author is NOT a fan of the ff:
The framework by default integrates nunjucks templating for the front end and mongodb for the backend.
> npm install oils -g
> oils new HelloWorld --template basic
template is optional...
> cd HelloWorld
> npm install
> node server.js
See NPM Releases page.
|-- conf //config files and routes
|-- web
| |-- public //assets like css, js, images
| |-- src
| |-- controllers //controllers
| |-- models //models for mongoose db
| |-- views //uses swig for templating
You can see the README.md's of each directory above for more information.
web
The global variable web
can be used almost anywhere to access the instance of oils. web.app
is the instance of express server.
web.include(path)
You can use include
function which is basically like require
except that it's based on the the project directory if the path starts with '/'.
E.g. Consider the ff structure:
|-- web
| |-- src
| |-- controllers
| |--folder
| |--subfolder
| |--controller1.js
|-- lib
| |--folder
| |--subfolder
| |--lib1.js
If you are in controller1.js and you want to import lib1.js
Instead of using:
const lib1 = require('../../../../../lib/folder/subfolder/lib1.js');
```
Use
```
const lib1 = web.include('/lib/folder/subfolder/lib1.js');
web.includeModel(path)
loads a model based on the path and returns a Mongoose Model. The path also behaves like include
i.e. if it starts with '/' it will base the path on the project's directory.
e.g.
const Book = web.includeModel('/web/models/Book.js');
web.models('modelName')
A convenience function for includeModel
e.g.
const Book = web.models('Book');
Oils js uses Mongoose for ORM, Mongo DB for the database and Nunjucks for templating. Only Mongo DB is supported for now but this may change in the future depending on the needs.
For the default templating, Nunjucks has been chosen because it doesn't mess much with the html syntax. You can override this by passing an express templateEngine e.g. let web = new Web({templateEngine: myTemplateEngin}).
The follow are motivations behind creating Oils Js Framework:
This sample app is self explanatory. Just browse through the directories and files and you will get the hang of it.
Example:
After you have set-up a new oils project.
module.exports = {
get: function(req, res) {
res.send("Hello world");
}
}
Basically there are two steps to make a plugin work:
Install the required module in node_modules directory via npm install or package.js,
and declare it /conf/conf.js (see /conf/conf.js for more information).
Creating your own plugin is easy; you just hook onto events of oils. See the (oils-plugin-basic)[https://github.com/mannyvergel/oils-plugin-basic] for more information.
Plugins: (Authentication (oils-plugin-auth))[https://github.com/mannyvergel/oils-plugin-auth]
Starting v0.2.5
beforeRender
web.on('beforeRender', function(view, options, callback, req, res) {
//called before res.render(...);
})
initServer
web.on('initServer', function() {
let web = this; //this is an instance of web
...
})
Starting v2.5.0
loadPlugins
Called after loading of plugins. This is called before initServer, before routes and controllers are configured. If you need to add middleware at the end of plugin initialization, this is the place.
More hooks to follow.
Authentication is implemented as a plugin: oils-plugin-auth. Just install via npm, and configure in plugins.js, make sure to enable it there.
If you have questions, feel free to drop me an email: manny@mvergel.com
The MIT License (MIT)
Copyright (c) 2014 Manny
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
FAQs
A slightly opinionated web framework built on top of Express 4.
The npm package oils receives a total of 17 weekly downloads. As such, oils popularity was classified as not popular.
We found that oils 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
npm has a revamped search experience with new, more transparent sorting options—Relevance, Downloads, Dependents, and Publish Date.
Security News
A supply chain attack has been detected in versions 1.95.6 and 1.95.7 of the popular @solana/web3.js library.
Research
Security News
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.