gpt4 book ai didi

javascript - expressjs路由器不工作

转载 作者:数据小太阳 更新时间:2023-10-29 05:54:43 25 4
gpt4 key购买 nike

我是 MEAN 堆栈的新手,所以我正在阅读教程,很明显并非所有人都使用相同的逻辑。但是现在我被困在这两个例子上了

例子一

// server.js
var express = require('express'),
app = express(),
port = 1337;
// indicating view folder
app.set('views', './views');
// indicating view engine
app.set('view engine', 'ejs');
// adding routes
require('./routes/index.js')(app);
require('./routes/user.js')(app);
//
app.listen(port);
module.exports = app;


./routes/index.js
module.exports = function(app) {
// show indix view
app.get('/', function(req, res) {
res.render('index', {
title: 'Index page',
});
});
};

上面我们使用了 appget 方法(它是 express 的实例)

./routes/user.js
module.exports = function(app) {
// showing user page
app.route('/users').get(function(req, res) {
res.render('user', {
title: 'User page'
});
});
};

上面我们使用了expressroute方法,然后绑定(bind)了get

所以当应用程序运行时,我访问 localhost:1337 索引页面被调用当 localhost:1337/user 被调用时,用户页面被调用

例子二现在当我们使用 express myapp 命令时,这个例子有一些不同的逻辑

我们有主要的 app.js

var express = require('express');

var routes = require('./routes/index');
var users = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use('/', routes);
app.use('/users', users);

app.listen(1337);

module.exports = app;

正如您首先看到的,我们需要 indexuser 路由文件然后我们使用app.use命令来设置路由。

./routes/index.js文件中

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});

module.exports = router;

我们获取express的方法router,然后绑定(bind)get方法给它

所以我的问题是,当我提交 app.use('/', routes); 并调用 localhost:1337 时出现错误但是我们已经在 ./routes/index.js 中使用路由器来显示索引页面。这应该根据第一个例子工作。

编辑错误信息

Error: Not Found
at app.use.res.render.message (/home/vagrant/meanstack/myapp/app.js:30:15)
at Layer.handle [as handle_request] (/home/vagrant/meanstack/myapp/node_modules/express/lib/router/layer.js:82:5)
at trim_prefix (/home/vagrant/meanstack/myapp/node_modules/express/lib/router/index.js:302:13)
at /home/vagrant/meanstack/myapp/node_modules/express/lib/router/index.js:270:7
at Function.proto.process_params (/home/vagrant/meanstack/myapp/node_modules/express/lib/router/index.js:321:12)
at next (/home/vagrant/meanstack/myapp/node_modules/express/lib/router/index.js:261:10)
at SendStream.error (/home/vagrant/meanstack/myapp/node_modules/express/node_modules/serve-static/index.js:107:7)
at SendStream.emit (events.js:95:17)
at SendStream.error (/home/vagrant/meanstack/myapp/node_modules/express/node_modules/send/index.js:244:17)
at SendStream.onStatError (/home/vagrant/meanstack/myapp/node_modules/express/node_modules/send/index.js:340:48)

我有这段代码来处理错误

app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
})

现在,当我评论此代码并评论 app.use('/', routes); 并运行 server.js

我在运行 localhost:1337 时得到了这个

Cannot GET / 

如果您仍然看不到错误,请在文件夹中尝试 express app 并创建一个新文件 server.js 并添加以下代码并运行 node server。 js

var express = require('express');
var path = require('path');
var routes = require('./routes/index');
var users = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

//app.use('/', routes);
app.use('/users', users);

app.listen(1337);

module.exports = app;
console.log(" call 192.168.33.33:1337");

最佳答案

我运行了 express-generator,使用您提供的代码创建了一个新文件 server.js。在访问我的 localhost:1337 时,我收到了“CANNOT GET/”错误。然后我在 server.js 中取消注释这一行

app.use('/', routes);

它奏效了。

编辑:

之所以需要调用 app.use('/', routes) 才能使路由处理正常工作,是因为当您调用

var app = express();

此时,“app”变量包含对内存中的 express 对象的引用。意思是当你打电话时

var router = express.Router(); 

此时路由器是独立对象。路由器没有引用您创建的应用程序,这意味着当您使用 route.get() 注册您的 GET 路由时,它不会影响您的 express 应用程序实例。因此,当您点击 localhost:1337 时,您会收到一个错误,直到您注册该路由。

为了在您的应用程序中注册您的路由器,您需要导出并要求您的路由器,并将其注册到

routes = require('path/to/router')
app.use('/', routes)

您的第一个示例之所以有效,是因为在那种情况下,您使用 app.get() 直接向您的应用程序实例注册了路由处理程序

关于javascript - expressjs路由器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28196421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com