[英]Default route in Express.js
我正在用 node.js 和 express 编写一个应用程序。
我已经设置了一个默认路由:
app.get('/', function(req, res){
res.sendfile('./views/index.html');
});
当我转到 /localhost:port/ 时,这工作正常
但是在 URL 之后,当我输入任何内容时, /localhost:port/blah 我得到 404 ERROR,这是有道理的。
我想设置一个默认路由,这样无论我在 localhost:port/ 之后输入什么 URL,它都应该返回相同的 html 文件。
我尝试将 / 更改为 * :
app.get('*', function(req, res){
res.sendfile('./views/index.html');
});
但在我这样做之后,我开始在控制台中收到此错误,但没有任何显示:
未捕获的语法错误:意外的标记 <
在我所有的 Javascript 文件中: :3000/scripts/myscript.js:1
我的 javascript 文件以某种方式显示了 HTML 的内容
===编辑====
我使用了这个,它对第一级 url 工作正常:比如 loclhost:port/blah
app.use(function(req, res){
res.sendfile('./views/index.html');
});
但是当 URL 是多级时,我看到了与前面描述的相同的问题 localhost:port/blah/foo 这里的问题是路由器正在 /blah 文件夹下为所有 javascript 和 CSS 文件寻找公共目录在这种情况下,不存在。 它返回默认的 HTML 文件。 我该如何解决?
==================编辑发布整个代码 ============================ ==============
var http = require('http');
var express = require('express');
var api = require('./routes/api');
var mongoose = require('mongoose');
var app = express();
mongoose.connect('mongodb://localhost/mydb');
app.set('port', process.env.PORT || 3000);
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(express.cookieParser('your secret here'));
app.use(express.session());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
app.get('/api/user/:userid', api.getUserInfo);
app.get('/', function(req, res){
res.sendfile('./views/index.html');
});
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
除此之外,我还有一个带有 myscript 链接的 HTML,
<script type="text/javascript" src="./scripts/myscript.js" ></script>
在您之前的所有路线之后添加此路线
app.get('*',function (req, res) {
res.redirect('/');
});
这会将任何未处理的路由重定向到索引“/”
对于较新版本的 express,我建议使用 res.sendStatus,因为 res.send 已被弃用。
Express v3
app.use(function(req, res){
res.send(404);
});
快递 v4
app.use(function(req, res){
res.sendStatus(404);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.