Ior*_*ori 5 javascript node.js express
我是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',
});
});
};
Run Code Online (Sandbox Code Playgroud)
上面我们使用的get方法来自app(实例express)
./routes/user.js
module.exports = function(app) {
// showing user page
app.route('/users').get(function(req, res) {
res.render('user', {
title: 'User page'
});
});
};
Run Code Online (Sandbox Code Playgroud)
上面我们使用route方法express然后绑定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;
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,首先我们需要index并user路由所需的文件,然后我们使用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;
Run Code Online (Sandbox Code Playgroud)
我们得到的方法router的express,然后绑定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)
Run Code Online (Sandbox Code Playgroud)
我有这个代码来处理错误
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
})
Run Code Online (Sandbox Code Playgroud)
现在,当我评论此代码和评论 app.use('/', routes);并运行server.js
我跑的时候会得到这个 localhost:1337
Cannot GET /
Run Code Online (Sandbox Code Playgroud)
如果仍然看不到错误,请尝试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");
Run Code Online (Sandbox Code Playgroud)
Yur*_*bin 10
我运行了express-generator,用你提供的代码创建了一个新的文件server.js.在点击我的localhost时:1337我收到了"无法获取/"错误.然后我在server.js中取消注释了这一行
app.use('/', routes);
Run Code Online (Sandbox Code Playgroud)
它奏效了.
编辑:
你需要调用app.use('/',routes)来使路由处理工作的原因是你打电话的时候
var app = express();
Run Code Online (Sandbox Code Playgroud)
此时,'app'变量包含对内存中快捷对象的引用.你打电话的意思
var router = express.Router();
Run Code Online (Sandbox Code Playgroud)
此时路由器是独立对象.路由器没有引用您创建的应用程序,这意味着当您使用route.get()注册GET路由时,它不会影响您的app实例.因此,当您点击localhost:1337时,在注册路由之前会出现错误.
要使用您的应用注册您的路由器,您需要导出并要求您的路由器,并注册它
routes = require('path/to/router')
app.use('/', routes)
Run Code Online (Sandbox Code Playgroud)
您的第一个示例工作的原因是因为在这种情况下,您使用app.get()直接在您的应用实例中注册路由处理程序
| 归档时间: |
|
| 查看次数: |
11747 次 |
| 最近记录: |