Express – Fout: er is geen standaardengine opgegeven en er is geen extensie opgegeven

Ik krijg mijn api niet aan het werk met mijn express-server, ik krijg altijd een foutmelding:

Fout: er is geen standaardengine opgegeven en er is geen extensie opgegeven.

Ik ben er vrij zeker van dat het van de express router komt, maar ik kan niet vinden waar de fout vandaan komt…

Heb ik de express-router correct gebruikt? Omdat ik het nog nooit eerder heb gebruikt.

server.js:

const createError = require('http-errors');
const express = require("express");
const bodyParser = require("body-parser");
const cookieParser = require('cookie-parser');
const logger = require('morgan');
const api = require('./routes/api');
const app = express();
const MongoClient = require('mongodb').MongoClient;
const MONGODB_URI = process.env.MONGODB_URI;
const PORT = process.env.PORT || 5000;
app.use('/', api);
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cookieParser());
// catch 404 and forward to error handler
app.use(function(req, res, next) {
    next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
    // set locals, only providing error in development
    res.locals.message = err.message;
    res.locals.error = req.app.get('env') === 'development' ? err : {};
    // render the error page
    res.status(err.status || 500);
    res.render('error');
});
// Database object
var db;
// Initialize connection once with db
MongoClient.connect(MONGODB_URI, function(err, database) {
    if(err) throw err;
    db = database;
    // Start the application after the database connection is ready
    app.listen(PORT, () => console.log(`Server listening on port ${PORT}`));
});
module.exports = db;
module.exports = app;

routes/api.js:

// const app = require("../server");
var db = require("../server");
const { videos } = require("../helpers/videos");
const { videoLinksValidator } = require("../helpers/video-links-validator");
const { getTitleType } = require("../helpers/title-type-extractor");
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
    console.log("RESPONSE", res) 
});
// Create a GET route
router.get("/express_backend", (req, res) => {
    res.send({ express: "YOUR EXPRESS BACKEND IS CONNECTED TO REACT" });
});
router.post("/video_url", async (req, res)=> {
    const videoURL = req.body.videoURL.videoURL;
    let titleType = await getTitleType(videoURL);
    let videosAndTitle = await videos(videoURL, titleType);
    let videoAndTitleReady = await videoLinksValidator(videosAndTitle);
    console.log(videoAndTitleReady)
    return res.send(videoAndTitleReady);
});
module.exports = router;

Antwoord 1, autoriteit 100%

Deze fout is omdat u res.render gebruikt. res.render zal proberen de pagina te renderen, daarvoor moet je de view engine instellen zoals jade etc. Maar hier heb je dat niet nodig, dus verander res.renderin res.sendzoals dit

Probeer dit

app.use(function(err, req, res, next) {
    // set locals, only providing error in development
    res.locals.message = err.message;
    res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.send('error');//this or res.status(err.status || 500).send('error')
});

Voor je tweede vraag moet je bodyParser zo bovenaan zetten in server.js

app.use(bodyParser.json()); //here
app.use('/', api);
app.use(logger('dev'));
//app.use(bodyParser.json()); your old code

Antwoord 2, autoriteit 30%

Ik had dezelfde fout. Ik ben vergeten de onderstaande syntaxis toe te voegen aan het server.js-bestand

//set default engine, and provide [handlebars as] extension
app.set('view engine', 'handlebars');

Antwoord 3

In uw code bent u aan het renderen, terwijl als uw view-engine niet werkt, u een fout krijgt

  res.status(err.status || 500);
    res.render('error');

Dus als u uw toepassing als API-gateway gebruikt, moet u die antwoorden verzenden. Als res.send momenteel verouderd gebruik

 res.status(err.status || 500).send('error');

Other episodes