节点js app.use抛出中间件功能

时间:2020-07-11 19:43:25

标签: node.js express

我是node.js的新手,我关注博客并练习如何创建新博客

https://vegibit.com/node-js-blog-tutorial/

完成此步骤后,一旦添加以下行,一切都将正常运行“带有Express的Edge Template Engine”

app.use(expressEdge);
app.set('views', __dirname + '/views');

我收到以下错误。

C:\ Automation \ NodeJS_Projects-master \ nodejs-blog-tutorial \ node_modules \ express \ lib \ application.js:210 抛出新的TypeError('app.use()需要中间件功能') ^

TypeError:app.use()需要一个中间件功能 在Function.use(C:\ Automation \ NodeJS_Projects-master \ nodejs-blog-tutorial \ node_modules \ express \ lib \ application.js:210:11) 在对象。 (C:\ Automation \ NodeJS_Projects-master \ nodejs-blog-tutorial \ index.js:8:5) 在Module._compile(内部/模块/cjs/loader.js:1138:30) 在Object.Module._extensions..js(内部/模块/cjs/loader.js:1158:10) 在Module.load(internal / modules / cjs / loader.js:986:32) 在Function.Module._load(内部/模块/cjs/loader.js:879:14) 在Function.executeUserEntryPoint [作为runMain](内部/模块/run_main.js:71:12) 在internal / main / run_main_module.js:17:47

完整代码试图解决

    const express = require('express');
    var slash = require("slash");
    const expressEdge = require('express-edge');
    const app = new express();
    var dirname = __dirname;
    if (process.platform === 'win32') dirname = slash(dirname);
    app.use(express.static('public'));
    app.use(expressEdge);
    app.set('views', dirname + '/views');
    
    mongoose.connect('mongodb://localhost:27017/node-blog', { useNewUrlParser: true })
        .then(() => 'You are now connected to Mongo!')
        .catch(err => console.error('Something went wrong', err))
        
    app.get('/posts/new', (req, res) => {
        res.render('create')
    });
     
    app.get('/', (req, res) => {
        res.render('index');
    });
    
    app.get('/about', (req, res) => {
        global.__base = dirname + '/pages/about.html';
        console.log(global.__base)
        res.sendFile(global.__base);
    });
    
    app.get('/contact', (req, res) => {
        global.__base = dirname + '/pages/contact.html';
        res.sendFile(global.__base);
    });
     
    app.get('/post', (req, res) => {
        global.__base = dirname + '/pages/post.html';
        res.sendFile(global.__base);
    });
    
    app.listen(4000, () => {
        console.log('App listening on port 4000')
    });

1 个答案:

答案 0 :(得分:0)

由于本教程似乎使用的是express-edge的旧版本,因此本教程可能已过时,因为您应按以下步骤设置express-edge(有关更多详细信息,请参见https://github.com/ecrmnn/express-edge#usage):

const { engine } = require('express-edge');
...
app.use(engine); // instead of app.use(expressEdge);

或者,您可以执行以下操作:

const expressEdge = require('express-edge');
...
app.use(expressEdge.engine);

如果您查看source,可以看到该模块导出了一个对象(包含configengine)并且没有中间件,因此产生了错误。