app.use() 需要 express-edge 中的中间件函数

1 node.js express nodemon

我正在使用 node js 创建博客并遵循本教程https://vegibit.com/node-js-blog-tutorial/但现在我坚持它给我 app.use('express-edge') 上的错误这是我的代码

const path = require('path');
const expressEdge = require('express-edge');
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
 
const app = new express();
 
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.use(express.static('public'));
app.use(expressEdge);
app.set('views', __dirname + '/views');
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({
    extended: true
}));
 
app.get('/', (req, res) => {
    res.render('index');
});
 
app.get('/posts/new', (req, res) => {
    res.render('create')
});
 
app.post('/posts/store', (req, res) => {
    console.log(req.body)
    res.redirect('/')
});
 
app.listen(4000, () => {
    console.log('App listening on port 4000')
});
Run Code Online (Sandbox Code Playgroud)

我的错误看起来像 [nodemon] 开始node index.js C:\Users\91762\Desktop\Blog\node_modules\express\lib\application.js:210 throw new TypeError('app.use() requires a middleware function') ^

类型错误:app.use() 需要在 Object 的 Function.use (C:\Users\91762\Desktop\Blog\node_modules\express\lib\application.js:210:11) 处有一个中间件函数。(C:\Users\91762\Desktop\Blog\index.js:16:5) 在 Module._compile (internal/modules/cjs/loader.js:945:30) 在 Object.Module._extensions..js (internal /modules/cjs/loader.js:962:10) 在 Module.load (internal/modules/cjs/loader.js:798:32) 在 Function.Module._load (internal/modules/cjs/loader.js:711) :12) at Function.Module.runMain (internal/modules/cjs/loader.js:1014:10) at internal/main/run_main_module.js:17:11 [nodemon] 应用程序崩溃 - 在开始之前等待文件更改.. .

hoa*_*gdv 11

也许教程已经过时了,最新版本的express-edge没有将边缘引擎导出为默认导出,包导出了一个对象,其中包含config, engine.

如果您的节点版本支持对象解构,您可以遵循包文档。

...
const { engine } = require('express-edge');
...
app.use(engine);
...
Run Code Online (Sandbox Code Playgroud)

或者,只需在您的代码中稍作更改:

app.use(expressEdge.engine); // instead of app.use(expressEdge);
Run Code Online (Sandbox Code Playgroud)