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.js
将views
文件夹移动到相同的位置
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