NodeJS不提供静态html

我有一个问题,我的节点服务器上的HTML文件。

“index.js”中的代码如下所示:

const express = require('express'); const app = express(); var path = require('path'); app.use(express.static(path.join(__dirname + '/public'))); app.get('/', function (req, res) { res.sendFile('views/home.html'); }); app.listen(8081, function () { console.log('Magic is happening on port 8081!'); }); 

这是我的文件结构的图片:

文件结构

当我运行服务器,它给了我这个错误:

 TypeError: path must be absolute or specify root to res.sendFile 

最后,我需要一个服务器,可以服务几个不同的页面,这只是我服务的第一页(如果第一页不起作用,没有意义。)

我究竟做错了什么?

好的,所以我想出了一个解决scheme。

我改变了整个设置

 var express = require('express'); var app = express(); var port = process.env.PORT || 8081; var path = require('path'); var http = require('http'); var router = express.Router(); //var data = require('./routes/data'); // Setting the view engine and defining paths app.engine('html', require('ejs').renderFile); app.set('view engine', 'html'); app.use(express.static(path.join(__dirname, 'public'))); app.set('views', path.join(__dirname, 'views')); require('./routes/routes')(app); app.listen(port, function () { console.log('server running on port ' + port); }); module.exports = app; 

现在,我正在按照我想要的方式工作。 不知道如果它的最佳或完美的,但我认为它的工作。

感谢大家的帮助!!

为了使这个代码工作:

 const express = require('express'); const app = express(); var path = require('path'); app.use(express.static(path.join(__dirname, 'public'))); app.get('/', function (req, res) { res.sendFile('views/home.html'); }); app.listen(8081, function () { console.log('Magic is happening on port 8081!'); }); 

你必须有这样的目录结构:

 views |-home.html public |- some files here index.js 

文档和错误告诉你sendFile [...]Unless the root option is set in the options object, path must be an absolute path to the file[...] res.sendFile(path [,options] [,fn]) )

所以你必须写:

 res.sendFile(path.join(__dirname, 'public/views/home.html')) 

运行这个代码,将HTML文件保存在同一文件夹中,例如:浏览器中的index.html,localhost:9000 / index.html

  var http = require("http"); var fs = require("fs"); var port = 9000; //create server http.createServer(function(req,resp){ reqUrl = req.url; var day = reqUrl.slice(1,reqUrl.length-1); file = reqUrl; callPage(req,resp,file); }).listen(port); function callPage(req,resp,fileName){ fileName = reqUrl.slice(1,reqUrl.length); console.log(fileName) fs.readFile(fileName,function(err,html){ if(err){ throw err; } resp.writeHead(200,{"content-type":"text/html"}); resp.write(html); resp.end(); }); } 

对于您的dir结构,您的代码必须看起来像

app.use(express.static(path.join(__dirname, 'public', 'views'), {index: 'home.html'})); app.use(express.static(path.join(__dirname, 'public'))); 提供静态文件示例

这是我的build议:

1)使用index.jsviews文件夹移动到相同的位置

2)更新index.js代码:

 const DEBUG_MODE = (process.env.DEBUG == 1), express = require('express'), app = express(); /* DEFINE VIEW RENDERER */ app.set('view cache', !DEBUG_MODE); app.engine('html', require('ejs').renderFile); app.set('view engine', 'html'); /* DEFINE VIEW FILES LOCATION */ app.set('views', __dirname + '/views'); /* KEEP STATIC FILES IN SOME CONSTANT (GROUPED) PLACE, EX.: /assets */ app.use('/assets/css', express.static(__dirname + '/public/css')); app.use('/assets/images', express.static(__dirname + '/public/images')); /* RENDER home VIEW FOR ROOT REEQUEST */ app.all('/', (req, res) => res.render('home')); app.listen(8081, function () { console.log('Magic is happening on port 8081!'); }); 

提供视图文件是通过简单地调用res.render('view-name');完成的快速应用程序的工作res.render('view-name'); (没有扩展名,cuz已经在app.engine('html', ...);定义app.engine('html', ...);

PS如果您需要示例: https : //bitbucket.org/num8er/sum-az-website/src