1
votes

I'm creating blog using node js and following this tutorial https://vegibit.com/node-js-blog-tutorial/ but now I stuck it gives me error on app.use('express-edge') here is my code

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')
});

and my error looks like [nodemon] starting node index.js C:\Users\91762\Desktop\Blog\node_modules\express\lib\application.js:210 throw new TypeError('app.use() requires a middleware function') ^

TypeError: app.use() requires a middleware function at Function.use (C:\Users\91762\Desktop\Blog\node_modules\express\lib\application.js:210:11) at Object. (C:\Users\91762\Desktop\Blog\index.js:16:5) at Module._compile (internal/modules/cjs/loader.js:945:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:962:10) at Module.load (internal/modules/cjs/loader.js:798:32) at 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] app crashed - waiting for file changes before starting...

2

2 Answers

10
votes

Maybe the tutorial is out of date, newest version of express-edge does not export edge engine as default export, the package exports a object what includes config, engine.

You can follow package document if your node version support object destructuring.

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

Or, just change a little in your code:

app.use(expressEdge.engine); // instead of app.use(expressEdge);
1
votes

Use it like a handler is the best choice.

app.use(expressEdge.engine);