node.js - express - 错误 : No default engine was specified and no extension was provided

标签 node.js express

我无法让我的 api 与我的 Express 服务器一起使用,我总是收到错误:

Error: No default engine was specified and no extension was provided.

我很确定它来自快速路由器,但我找不到错误来自哪里......

我是否正确使用了 Express Router?因为我以前从未使用过它。

服务器.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;

路线/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;

最佳答案

此错误是因为您正在使用 res.render。 res.render将尝试渲染页面,为此您必须设置诸如jade等 View 引擎。但在这里您不需要这样做,因此将res.render更改为res.send 像这样
试试这个

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

对于你的第二个问题,你必须将 bodyParser 放在顶部,就像在 server.js 中一样

app.use(bodyParser.json()); //here
app.use('/', api);

app.use(logger('dev'));

//app.use(bodyParser.json()); your old code

关于node.js - express - 错误 : No default engine was specified and no extension was provided,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52430252/

相关文章:

node.js - sails.js 从集合水线中删除所有成员

mongodb - 如何在我的 Express.js View 和路由中使用 "cache"mongoDB/Mongoose 结果

node.js - 使用 express-fileupload 上传文件不起作用

node.js - 使用 http-proxy 与 node.js 进行负载平衡

node.js - 用户定义的回调函数是否使用 node.js 中的线程池?

javascript - 如何确保两个客户端不会同时请求破坏状态

node.js - NodeJS : TypeError: Converting circular structure to JSON

javascript - 向变量添加值不起作用,仅附加

json - 在 NodeJS 中如何使用 node-postgres 模块将 JSON 对象保存为文本?

javascript - 渲染方法中出现意外的标记参数