如何用expressJS创build一个nodeJS模块
我正在做一个nodeJS模块,我想用expressJS作为它的框架。 我想看看,我怎么可以通过,其中包括一个函数和app.get(); 并通过另一个文件(如实际的应用程序)调用它。
var express = require("express"); var app = express(); app.get("/", function (req, res) { exports.type = function (text) { console.log(req.ip); console.log(text); } });
现在当我使用这个,我打电话给实际的应用程序,如:
var web = require("directory_to_file"); var express = require("express"); var app = express(); var http = require("http").Server(app); app.get("/", function (req, res) { web.type("Hello, world"); }); http.listen(10022, function () { console.log("server is up"); });
我得到一个错误:
TypeError: Property 'type' of object #<Object> is not a function
任何人都知道一种方法,使我可以调用这个函数?
在您的directory_to_file
您只能在app.get('/')
上导出,这将永远不会被调用。
你可以在你的directory_to_file
添加下面的代码
var express = require('express'); var router = express.Router(); router.get('/', function(req, server) { console.log(req.ip); }); module.exports = router;
在你的主文件中,你可以使用app.use('/', web)
一个简短的解释:你正在你的directory_to_file
文件中创build一个不会被启动或使用的新的快速app / config。 所以你的app.get事件不会被触发一次。
这就是为什么web.type
不是一个函数。 你没有出口任何东西。 使用我提供的方式。 这是一个常用的方法。
你可以调用我提供的“路由”的代码。 创build多个路线/路线文件,并将其包含在主要方法中。
你的代码看起来很混乱。 如果我正确地理解了你,你真正想要做什么(至less在Node / Express术语中)是编写你自己的中间件 。
快车的devise是考虑到这一点,它是非常简单的,例如
ipLogger.js
module.exports = function(req, res, next) { console.log(req.ip); next(); }
app.js
var http = require("http") , express = require("express"); , app = express() , server = http.Server(app) , ipLogger = require("./ipLogger.js"); app.use(ipLogger()); // log IP of all requests // handle routes server.listen(10022, function() { console.log("server is up"); });
通常有两件事情要作为一个模块导出 – 一个API和一个中间件。 中间件的典型例子是authentication模块。 要做中间件,只需导出中间件。 我倾向于做更多一点,所以我可以稍后configuration中间件。 一些沿着这条线:
module.exports = exports = function(config) { // Do something with config here return function(req, res, next) { // your middleware here }; };
然后你可以在你的主程序中使用你的中间件,如下所示:
var app = require('express')(), mymodule = require('./mymodule'); var config = {}; // replace with whatever config you need app.use(mymodule(config)); app.listen(process.env.PORT || 3000);
要实现一个API,你将创build一个Router对象,然后将你的路由附加到Router对象。 然后你可以在主程序中“挂载”你的路由器。 例如,你可以有一个名为“myroutes.js”的文件,内容如下:
var express = require('express'), myroutes = express.Router(); myroutes.get('/foo', (req, res) => { res.status(200).type('application/json').send({ myparam: 'foo' }); }); module.exports = exports = myroutes;
在你的主程序中有以下内容:
var app = require('express')(), myroutes = require('./myroutes'); app.use('/api', require('./myroutes')); app.listen(process.env.PORT || 3000);
在'myroutes.js'中,我定义了/ foo的子path,然后在主程序中,我将它挂载在/ api上,所以我将访问/ api / foo来访问该API。