Javascript app.get未定义(node.js)

Javascript app.get未定义(node.js),javascript,node.js,express,Javascript,Node.js,Express,在我的app.js文件中,我执行以下操作 var app = module.exports = express(); 然后在我的register.js文件中,我使用get以以下方式呈现页面 var module = require('../app'); module.app.get('/register', function (req, res) { res.render('register.jade', { title: 'register' }); }); 但是我得到一个错误,

在我的
app.js
文件中,我执行以下操作

var app = module.exports = express();
然后在我的
register.js
文件中,我使用
get
以以下方式呈现页面

var module = require('../app');

module.app.get('/register', function (req, res) {
    res.render('register.jade', { title: 'register' });
});
但是我得到一个错误,
get不能与app一起使用,因为它是未定义的

如果我将我的
get
函数更改为以下内容,则一切正常

exports.register = function (req, res) {
    res.render('register.jade', { title: 'register' });
};
并将我的
app.js
更改为

app.get('/register', reg.register);
。。。它会起作用的

但我希望能够导出
应用程序
,以便在其他路径中使用它。如何正确导出它

编辑

我刚刚意识到需要模块的正确方法是使用
var-app=require('./app')

我前面提到的道路是错误的


但是现在我遇到了一个错误,
找不到模块。/app
,我不知道为什么。

在你的app.js中,尝试类似以下内容:

module.exports = {
    app: express()
}
然后,当您执行
var module=require('./app')
时,
module
将包含一个具有
app
属性的对象

请注意,我不知道
express()
做什么,但我假设它返回的对象上有
get()
函数。

试试这个

//app.js

var express = require('express');

var app = module.exports = express();


//register.js

var module = require('./app.js');

//var http   = require('http');
//var server =  http.createServer(module);


module.get('/register', function(req,res,next) {
    // body...
    console.log("register");

});

//server.listen(1338);

只有分配给
module.exports
的内容在该JavaScript文件之外可见。在您的情况下,这是
express()
的返回值。没有导出
模块.app
。另外,停止使用
module
作为变量名,因为它是注入到JavaScript文件的变量之一

最好执行更清晰的操作,并手动控制服务器脚本,该脚本将在服务器运行时调用所有必需的设置函数:

结构:

project
   |_controllers
   |   |_login.js
   |   |_register.js
   |_routes.js
   |_app.js
控制器/login.js:

controllers/register.js:

routes.js:

app.js:


我想说的第一件事是
module.exports=…
exports.something=…
要做什么
module.exports
是在
require
it之后要导入的对象。假设有一个名为X.js的文件:

var A = {
    name:'A'
};
module.exports = A;
现在我们可以将其导入到其他文件中,假设我们有一个名为Y.js的文件:

var A = require('pathToX/X');
console.log(A.name);
因此,在您的代码中
module.exports=express(),导出的对象是“express()”本身。您应该在其他文件(例如register.js文件)中使用它,方法如下:

var module = require('../app');
module.get('/register', function (req, res) {
    res.render('register.jade', { title: 'register' });
});
也就是说,当您调用
require('../app')
时,您得到的是
express()
。因此,您的代码
module.app.get
等于
express().app.get
,因为
express()
中没有
app
属性

此外,
模块
是在node js中预定义的,请不要将其用作变量名,您可以将
register.js
文件更改为

var app = require('../app');
app.get('/register', function (req, res) {
    res.render('register.jade', { title: 'register' });
});
这是真的:
exports===module.exports
,因此您在代码
app.get('/register',reg.register)中正确地导入了register


还有一件事,
exports={name:'A'}
不等于
模块。exports={name:'A'}
,这很简单,
exports
只是
模块的变量链接。exports
,更改
exports
链接本身不会更改
模块。exports

仍然告诉我
app.get
不是一个函数那么要检查的事情:-通过
express()
返回的对象是否有
get()
函数
register.js的父目录中的
app.js
是否与您在
require('../app')
调用中暗示的一样?该应用程序位于父目录中,因此
require
很好,我已经测试过了。我假设
express
确实有一个get函数,因为在我的
app.js
文件中有一个ve
app.get
,它可以工作。请尝试验证您正在导入“../app.js”的文件夹结构,因此您的app.js应该放在一个包含register.js的文件夹中it@oneLeggedChicken我的项目文件夹包含还有app.js文件和几个其他文件夹,其中一个是
routes
文件夹,在
routes
中有我的文件
register.js
。那么,
需要
的正确方法是什么呢?。。。换句话说,
app.js
routes
在同一个级别上好吧,我想你说的同一级别是指在同一个文件夹中,所以应该是这样的
var module=require('./app.js')
@oneLeggedChicken不,我测试了它,我相信我的require语句是好的,问题还在于其他地方,所以在我的
/controllers/register
文件中,我将如何使用
/register
POST函数?@Bolboa在回答中更新。这是一个好答案,但我有一个问题。我刚刚意识到需要模块的正确方法是
var-app=require('./app')
但它说
找不到模块。/app
…知道为什么吗?路径、文件名(*nix区分大小写)或权限,我无法想象其他因素会导致此错误。你使用什么操作系统?你介意把整个项目上传到github或者类似的东西,让我们看看这个项目吗?
var A = {
    name:'A'
};
module.exports = A;
var A = require('pathToX/X');
console.log(A.name);
var module = require('../app');
module.get('/register', function (req, res) {
    res.render('register.jade', { title: 'register' });
});
var app = require('../app');
app.get('/register', function (req, res) {
    res.render('register.jade', { title: 'register' });
});