UNPKG

require-node-example

Version:

An example for how to use npm package: require-node & require-node-loader

164 lines (133 loc) 5.11 kB
# require-node ## A node middleware let that browser js code can require node js code which is still running at node server ### *Example for how to use `require-node` in [https://www.npmjs.com/package/require-node-example](https://www.npmjs.com/package/require-node-example)* *** require-node: In client(eg: Browser), you can REQUIRE and CALL server side javascript which is still running at server(eg: Node.js). require-node 让您能在前端(比如:浏览器)require后端javascript代码并调用,而这些后端代码在执行时依然在服务器上执行,而非浏览器里。 For example: A javascript module(test.js) in Node server, you can require and call that in Browser, like this: 比如:您在Node服务器有一个模块test.js,您可以在浏览器中如下引用并调用: **In Browser code :** ``` var test = require('path/to/test.js') test.getServerTime(function(err, result) { if(err) return; console.log('Node server time:', result.nodeServerTime) console.log('MySql server time:', result.mysqlServerTime) }) ``` **In Node server code (test.js) :** ``` var mysql = require('mysql') function getServerTime(callback) { mysql.query('select now()', function(err, rows){ callback(err, { nodeServerTime: new Date(), mysqlServerTime: rows && rows[0] }) }) } exports.getServerTime = getServerTime ``` Note: also support `promise``async/await` and `import` grammar. ## Installion ``` $ npm install require-node ``` **Note:** if use require-node with **require.js** or **sea.js**, you cann't install globally. **(Install without -g parameter)** ## Use ``` //middleware: function(req, res, next){ ... } var middleware = require('require-node')({ base: "path/to/server" }) ``` You can use this middleware in node HTTP ``` require('http').createServer(function (req, res) { middleware(req, res, function () { //req that require-node not process } }) ``` also, you can use this middleware in node [EXPRESS](https://www.npmjs.com/package/express) ``` var express = require('express') var app = express() app.use(middleware) ``` or, you can use this middleware in node [KOA](https://www.npmjs.com/package/koa) ``` var Koa = require('koa') var app = new Koa() app.use((ctx, next) => { var { req, res, body } = ctx; req.body = body; return middleware(req, res, next); }) ``` *** ## Config options **1. base: '/path/to/server', `ONLY this config is necessary!`** > Config which back end file can be use in front end. **2. path: '/require-node'** (default) > Config which url path to be use sending ajax. **3. withCredentials: false** (default) > IN CROSS DOMAIN, config XMLHttpRequest object with cookie or not. **4. isDebug: false** (default) > Config require-node output log or not. **5. resolve: function(req, moduleName, functionName, formalParams){ return true/promise; }** > Sometimes, for security reasons, we will prevent some function calls. For each http request before processing, require-node calls this resolve configuration function, if the return is not true or promise resolve not true, call will be prevent. **6. inject: function(req, res, callback){ return {curUser: req.session && req.session.curUser}; }** > Use inject config, you can define Custom Injected Services. For more details, please refer to the next section: Inject Service. ## Inject Service **1. Use Default Service** If your back end function want use variable **$req**、**$res**、**$session**、http **$body**, you can define back end function like this: ``` function say(arg1, arg2, $req, otherArg1, otherArg2){ console.log($req) } exports.say = say ``` require-node will inject variable req to $req. **2. Use Custom Service** If want define Custom Injected Services, you can config like this(eg: curUser service): ``` var middleware = require('require-node')({ inject: function(req, res, callback){ return { curUser: req.session && req.session.currentUser, //if you store currentUser in req.session otherService: ... } } alias: ... }) ``` In your back end function, you can use curUser like this: ``` function say(arg1, arg2, curUser, otherArg1, otherArg2){ console.log(curUser) } exports.say = say ``` **3. Define Callback Name** By default, I think of your callback style back end function like this: ``` function say(arg1, arg2, ... , callback){ } exports.say = say ``` If your last formal parameter name is not a "callback", such as "cb", you need config inject: ``` var middleware = require('require-node')({ inject: function(req, res, callback){ return { //curUser: req.session && req.session.currentUser, cb: callback } } base: ... }) ``` That's all. *** *Example for how to use `require-node` in [https://www.npmjs.com/package/require-node-example](https://www.npmjs.com/package/require-node-example)*