如何使用expressJS创建nodeJS模块

时间:2015-10-10 18:45:10

标签: node.js function api express module

我正在制作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

任何人都知道如何制作它以便我可以调用该函数吗?

3 个答案:

答案 0 :(得分:1)

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

一个简短的解释: 您正在web.type文件中创建一个新的快速app / config,该文件无法启动或使用。所以你的app.get活动不会被解雇一次。

这就是<type>不是函数的原因。你没有出口任何东西。 使用我提供的方式。这是一种常用的方法。

您可以拨打我提供的代码&#34; route&#34;。创建多个路由/路由文件,并将它们包含在main方法中。

答案 1 :(得分:1)

通常有两件事要作为模块导出 - API和中间件。中间件的典型示例是身份验证模块。要做中间件,只需导出中间件。我倾向于做更多的事情,所以我可以稍后配置中间件。有点像这样:

char **args

然后,您可以在主程序中使用中间件,如下所示:

newNode->args = (char**)malloc(sizeof(*char)*10)
for(i = 0; i < 10; i++) {
    newNode->args[i] = (char *) malloc(sizeof(char)*20);
}

要实现API,您将创建一个Router对象,然后将您的路由附加到Router对象。然后,您可以将路由器“安装”到主程序中。例如,您可以使用名为“myroutes.js”的文件,其中包含以下内容:

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);

这里,在'myroutes.js'中,我正在定义/ foo的子路由,然后在主程序中,我将它挂载在/ api上 - 所以我将访问/ api / foo来访问API。

答案 2 :(得分:0)

您的代码看起来很混乱。如果我理解正确,你真正想做的事情(至少在Node / express术语中)就是自己编写middleware

Express的设计考虑到了这一点,而且非常简单,例如。

<强> 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");
});