我坚持使用server.use是node.js.每次我server.use(express.static('public'));
之前server.get
,它都不会运行,然后我会在server.use(express.static('public'));
之后更改server.get()
,因为它没有发生任何事情。
有人可以告诉我有什么区别吗?
这是我的剧本:
// Depedencies / built-in
import express from 'express';
import { join } from 'path';
import nodeSass from 'node-sass-middleware';
// you can place anything here, except depedencies
import config from './config';
import apiRouter from './api/index';
const server = express();
// Including Middleware
server.use(nodeSass({
src: join(__dirname + 'sass'),
dest: join(__dirname + 'public'),
}));
// everytime i take this before Router, it running, but
// but, the index won't showing up
server.use(express.static('public'));
// Setting up view engine
server.set('view engine', 'ejs');
// Router
server.get('/', (req, res) => {
res.render('index', {
title: 'Hello EJs',
});
});
// if i change after Route, it working well
// server.use(express.static('public'));
server.listen(config.port, () => {
console.log('magic happen on port: ', config.port);
});
答案 0 :(得分:0)
我会通过猜测出错是什么来回答。
1)server.use(express.static('public'));
这是告诉应用程序在哪里查找静态文件(如JS,CSS,图像和页面需要加载的其他内容)的方法。更多信息在这里。 http://expressjs.com/en/api.html#express.static
2)当您使用res.render('pathToRenderFile')
时,它会尝试使用指定的引擎server.set('view engine', 'ejs');
查找文件名。如果没有设置引擎,您还需要添加扩展名。默认情况下,它将显示在views
目录中。更多信息http://expressjs.com/en/guide/using-template-engines.html
因此,在您的情况下,您需要将index.ejs
放在views/index.ejs
内。那一切都应该有效。
3)应该在路由之前设置所有中间件(中间件函数),如server.use
或server.set
。
4)关于中间件,以及它的重点。在任何路由之前或之后,您可以执行请求或响应对象可能需要的某些操作。例如,您需要此中间件https://github.com/expressjs/body-parser将所有发布数据包含在req.body对象中。如果你不包括它,你将不得不自己解析它。这就是为什么express使用内置或中间件来处理这种情况的好方法。
以下是所有有用的中间件https://expressjs.com/en/resources/middleware.html
的列表中间件功能是按顺序执行的,因此中间件包含的顺序很重要。
这里有一个很好的例子https://expressjs.com/en/4x/api.html#app.use
希望这有帮助。