首页 > 解决方案 > 快递中的路由不符合我的预期

问题描述

我想将我所有的快速路由放在与主文件不同的文件中。但是,由于某种原因,我收到一个错误,描述我的路径顺序错误。为什么是这样?

我的思考过程是这样的:我认为var routes = require('./routes/index.js);会调用文件index.js夹中的文件routes。内index.js,文件将get服务器和respond通过发送tester.hbs内的文件views表示res.sendFile(__dirname + '/views/tester.hbs');。然后router由 导出module.exports。与 css 文件相同的逻辑。最后,文件index.jsserver.js通过调用app.use('/',routes);。但是,发生在我身上的事情似乎是服务器查看routes文件,但没有响应index.js它,而是“进一步”进入routes文件以查找views/tester. 我不知道这是为什么。

文件目录:

new
|
node_modules
public---tester.css
views---tester.hbs
routes---index.js
server.js
package.json
package-lock.json

错误:

Error: ENOENT: no such file or directory, stat 'C:\Users\przyb\Desktop\new\routes\views\tester.hbs'

server.js:

//Modules
var http = require('http');
var app = require('express');
var app = app();
var path = require('path');
var hbs = require('express-handlebars');
//Routes
var express = require('express');
var routes = require('./routes/index.js');
//Server
var hostname = '127.0.0.1';
var port = 8000;

//Static files
app.use(express.static(path.join(__dirname +'views')));
app.use(express.static(path.join(__dirname +'public')));
app.use('/',routes);


//View engine setup
app.engine('hbs', hbs({extname: 'hbs', defaultLayout: 'tester', layoutsDir: __dirname + '/views'}));
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');

//Live server
var server = http.createServer(function(req,res){
    res.statusCode = 200;
    res.setHeader('Content-Type','text/html');
    res.end('Still in server.js');
});

app.listen(8000);

module.exports = app;
var express = require('express');
var router = express.Router();
var path = require('path');
var app = require('express')();

router.get('/', function(req,res,next){
    res.sendFile(__dirname + '/views/tester.html');

});
router.get('/', function(req,res,next){
    res.sendFile(__dirname + '/public/tester.css');
});


module.exports = router;

我希望服务器routes/index.js通过var routes = require('./routes/index.js');app.use('/',routes);从那里index.js进行调查views/tester.hbs,尽管情况并非如此。

标签: javascriptnode.jsexpressrouting

解决方案


您正在发送路径 __dirname + views/tester.html 中的文件。 __dirname为您提供当前文件的路径,即您的路由文件夹,然后您说要在视图文件夹中获取 tester.html,但路由不包含任何名为视图的文件夹。因此,在 __dirname 之后,您需要返回一级,然后转到 views/tester.hbs。

res.sendFile(path.join(__dirname + "/../views/tester.hbs"));
res.sendFile(path.join(__dirname + "/../public/tester.css"));

希望能帮助到你...


推荐阅读