卡住server.use()

时间:2017-11-14 10:59:08

标签: javascript node.js express

我坚持使用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);
});

1 个答案:

答案 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.useserver.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

希望这有帮助。