我正在制作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
任何人都知道如何制作它以便我可以调用该函数吗?
答案 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");
});