【发布时间】:2019-05-02 18:10:18
【问题描述】:
我正在尝试在我的节点服务器上学习 express.js,并尝试将同样的东西从 http 模块复制到 express 框架中。
进一步解释: 在开始使用 express 之前,我使用的是第一个代码,其中我在“站点”文件夹中有一个文件树,其中包含诸如
之类的网页e:
|_node.js
|_node_modules
|_site
| |_abc
| | |_123.html
| | |_456.html
| | |_789.html
| |_cde
| | |_123.html
| | |_456.html
| | |_789.html
| |_abc.html
| |_cde.html
|_server.js
我通常只需让 localhost:8080/abc/123 获取 /site/abc/123.html 即可在 url 中访问它们。
var http = require('http');
var url = require('url');
var fs = require('fs');
var port = 8080;
http.createServer(function (req, res) {
var q = url.parse(req.url, true);
var filename = "./site" + q.pathname + ".html";
fs.readFile(filename, function(err, data) {
if (err) {
res.writeHead(404, {'Content-Type': 'text/html'});
return res.end("404 Not Found");
}
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(data);
return res.end();
});
}).listen(port);
console.log('Running on port ' + port);
这里,我试过这样做
var url = require('url');
var fs = require('fs');
var express = require('express');
var app = express();
var port = 8080;
var site = "/site"
app.get('*', function (req, res) {
var q = url.parse(req.url, true);
var filename = site + q.pathname + ".html";
fs.readFile(filename, function(err, data) {
if (err) {
console.log(err);
res.writeHead(404, {'Content-Type': 'text/html'});
return res.end("404 Not Found");
}
res.writeHead(200, {'Content-Type': 'text/html'});
res.sendFile(filename, { root: __dirname + site } );
return res.end();
});
})
var server = app.listen(port, function () {
console.log('Running on port ' + port);
})
但是现在当我输入 localhost:8080/abc/123 时使用 express 框架,但它只返回 404 Not Found 输入http://localhost:8080/abc
显然错误包含
{[Error: ENOENT: no such file or directory, open 'e:\site\abc.html']
errno: -4058,
code: 'ENOENT',
syscall: 'open',
path: 'e:\\site\\abc.html'}
完整路径应该是
e:\node.js\site\abc.html
server.js 位于 e:\node.js
为什么它在 e: 处比在 e:\node.js 处跳回
现在我猜测“root: __dirname”会导致错误,我应该用什么替换它以便它从 e:/node.js 而不是 e: 开始?
【问题讨论】:
-
您能否编辑您的问题以阐明您所期望的以及什么不起作用?目前尚不清楚实际问题是什么。
-
更新了我的问题,抱歉。在开始使用 express 之前,我使用的是第一个代码,其中我有一个文件树,其中包含 /abc/123.html、/cbe/234.html 等网页,我通常只需通过 localhost:8080/abc 在 url 中访问它们/123 获取 /abc/123.html。但是现在使用 express 框架,当我输入 localhost:8080/abc/123 时,它会返回 Cannot GET /abc/123
标签: javascript node.js express