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
文件中有一个veapp.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' });
});