首页 > 解决方案 > Express.js 渲染未命名为 index 的 html 文件时出错

问题描述

当我使用 index.html 时它不会给出任何类型的错误,但是每当我使用任何其他名称时,它都会引发错误。这是我的代码:-

const express = require('express'); 
const app = express(); 

app.use(express.static('Images'));  //It tells node that Images folder is the root folder

//app.set('view engine','html');

app.get("/",(req,res)=>{
   res.render("home");
});

app.listen(3000,()=>{
    console.log("Server listening to PORT:3000");
});    

这是错误

Error: No default engine was specified and no extension was provided.
    at new View (E:\NewExp\node_modules\express\lib\view.js:61:11)
    at Function.render (E:\NewExp\node_modules\express\lib\application.js:570:12)
    at ServerResponse.render (E:\NewExp\node_modules\express\lib\response.js:1012:7)
    at E:\NewExp\App.js:9:8
    at Layer.handle [as handle_request] (E:\NewExp\node_modules\express\lib\router\layer.js:95:5)
    at next (E:\NewExp\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (E:\NewExp\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (E:\NewExp\node_modules\express\lib\router\layer.js:95:5)
    at E:\NewExp\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (E:\NewExp\node_modules\express\lib\router\index.js:335:12)

为什么每当我使用除索引以外的任何其他名称时都会出现此错误?

标签: javascriptnode.jsexpress

解决方案


从您的代码中,我假设您想使用html文件(或扩展名)作为 express 的默认引擎。

来自快递文档:

使用 app.engine(ext, callback) 方法创建您自己的模板引擎。ext 指的是文件扩展名,callback 是模板引擎函数,它接受以下项目作为参数:文件的位置、选项对象和回调函数。

用例:

var fs = require('fs')

app.engine('html', function (filePath, options, callback) {
  fs.readFile(filePath, function (err, content) {
    if (err) return callback(err)
    // simple template engine
    var rendered = content.toString()
     .replace('#title#', '<title>' + options.title + '</title>')
     .replace('#message#', '<h1>' + options.message + '</h1>')
    return callback(null, rendered)
 })
})

app.set('views', './views')    // specify the views directory
app.set('view engine', 'html') // register the template engine

并像这样渲染:

app.get('/', function (req, res) {
  res.render('index', { title: 'Hey', message: 'Hello there!' })
})

推荐阅读