正如我的用户名所暗示的,我是 node.js 的新手。我正在努力学习它。作为这个过程的一部分,我正在努力建立一个基本的网站。该网站将显示几个基本网页并公开一个 REST 端点。我的项目结构是:
config.js
home.html
start.js
routes.js
server.js
resources
css
style.css
images
up.png
down.png
javascript
home.html.js
Run Code Online (Sandbox Code Playgroud)
start.js 有我的主要服务器代码。该文件通过命令行使用“node start.js”执行。启动后,我的服务器开始侦听端口 3000。 start.js 中的代码如下所示:
var express = require('express');
var app = express();
var UserProfileHandler = require('./app/handlers/UserProfileHandler');
app.configure(function () {
app.engine('html', require('ejs').renderFile);
app.set('views', __dirname + '/');
app.use(express.logger({ stream: expressLogFile }));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
var routes = {
userProfiles: new UserProfileHandler()
};
function start() {
routeConfig.setup(app, routes);
var port = process.env.PORT || 3000;
app.listen(port);
console.log("SUCCESS: Server listening on port %d in %s mode", port, app.settings.env);
}
exports.start = start;
exports.app = app;
Run Code Online (Sandbox Code Playgroud)
我的 routes.js 文件有以下内容:
function setup(app, routes) {
viewSetup(app);
apiSetup(app, routes);
}
function viewSetup(app) {
app.get('/', function (req, res) {
res.render("/home.html");
});
app.get('/home.html', function (req, res) {
res.render("/home.html");
});
}
function apiSetup(app, routes) {
app.get('/api/userProfiles/:username', routes.userProfiles.getUserProfiles);
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试在浏览器窗口中加载 home.html。我访问尝试此http://localhost:3000和http://localhost:3000/和http://localhost:3000/home.html。不幸的是,这些都不起作用。事实上,我收到一条错误消息:
Express 500 错误:无法查找视图“/home.html”
我知道我很接近。如果我访问,http://localhost:3000/api/userProfiles/me我会收到一个 JSON 响应,就像我期待的那样。出于某种原因,我似乎无法返回 HTML。我的 home.html 文件如下所示。
<html>
<head>
<script type='text/javascript' src='/resources/javascript/home.html.js'></script>
</head>
<body>
We're up and running! <img src='/resources/images/up.png' />
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
它是一个非常基本的 HTML 文件。即使 HTML 返回,我也担心它引用的 JavaScript 文件和图像将无法访问。我很担心这一点,因为我不太确定路径等在 Node.js 中是如何工作的。
如何让 home.html 在我的 Node 设置中工作?
谢谢!
由于您的视图文件与主文件位于同一文件夹中,因此以下更改应使其工作
从
app.set('views', __dirname + '/');//wont work
Run Code Online (Sandbox Code Playgroud)
到
app.set('views', __dirname);//will work
Run Code Online (Sandbox Code Playgroud)
从
res.render("/home.html");//wont work
Run Code Online (Sandbox Code Playgroud)
到
res.render("home.html");//will work
Run Code Online (Sandbox Code Playgroud)
有了这两个变化,视图应该可以正常工作
你提到的关于图像、css 和 js 的问题是由于静态文件夹配置,应该从
app.use(express.static(__dirname + '/public'));
Run Code Online (Sandbox Code Playgroud)
到
app.use(express.static(__dirname + '/resources'));
Run Code Online (Sandbox Code Playgroud)
因为您的静态文件夹名为resources.
但请确保在您的视图中您正在引用 css/js/image 文件,例如
例如:
/css/style.css
/images/up.png
/images/down.png
/javascript/home.html.js
Run Code Online (Sandbox Code Playgroud)
从您的视图文件
此外,如果上述功能有效,请检查您是否正确提供了路径,您也可以尝试
app.use(express.static(__dirname + '/resources'));
Run Code Online (Sandbox Code Playgroud)
之前
app.use(express.methodOverride());
app.use(app.router);
Run Code Online (Sandbox Code Playgroud)
线条像
app.configure(function () {
app.engine('html', require('ejs').renderFile);
app.set('views', __dirname + '/');
app.use(express.static(__dirname + '/public'));
//try changing the position of above line in app.configure and resatrt node app
app.use(express.logger({ stream: expressLogFile }));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
});
Run Code Online (Sandbox Code Playgroud)