我在节点服务器上提供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
最后我需要一台可以提供多个不同页面的服务器,这只是我服务的第一页(如果第一页不起作用,那就没有意义了。)
我做错了什么?
答案 0 :(得分:1)
好的,所以我想出了一个解决方案。
我将整个设置更改为此
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;
现在按照我想要的方式工作。不确定它是最佳的还是完美的,但我认为它能起作用。
谢谢大家的帮助!!
答案 1 :(得分:0)
对于你的目录结构,你的代码必须是
app.use(express.static(path.join(__dirname, 'public', 'views'), {index: 'home.html'}));
app.use(express.static(path.join(__dirname, 'public')));
Serving static files examples
答案 2 :(得分:0)
要使此代码有效:
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
答案 3 :(得分:0)
文档和错误告诉您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'))
所以你必须写:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// handle arrow click here
if (item.getItemId() == android.R.id.home) {
if(fromString.equalsIgnoreCase("second")){
//finish();
Intent intent = new Intent(getApplicationContext(),MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}else if(fromString.equalsIgnoreCase("first")){
finish(); // close this activity and return to preview activity (if there is any)
}
}
return super.onOptionsItemSelected(item);
}
答案 4 :(得分:0)
运行此代码,将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();
});
}
答案 5 :(得分:0)
以下是我的建议:
1)将views
文件夹移至index.js
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');
(无扩展名,cuz已在app.engine('html', ...);
中定义
P.S。如果您需要示例:https://bitbucket.org/num8er/sum-az-website/src