我有以下server.js文件:
var express = require('express'),
api = require('./api'),
app = express();
app
.use(express.static('./public'))
.use('./api', api)
.get('*', function (req, res) {
res.sendfile('public/main.html');
})
.listen(3000);
,server.js文件位于C:\ Users \ myName \ Desktop \ prodfixes \ server.js,main.html位于C:\ Users \ myName \ Desktop \ prodfixes \ public \ main.html 然后转到http://localhost:3000/并不会在屏幕上抛出错误但是在命令行上(我使用nodemon server.js来运行服务器)我收到错误:express deprecated res.sendfile:使用res .sendFile代替。那么我显然将res.send文件更改为res.sendFile但是当我刷新屏幕时出现错误:
TypeError:path必须是绝对路径或指定root到res.sendFile 在ServerResponse.sendFile(C:\ Users \ myName \ Desktop \ prodfixes \ node_modules \ express \ lib \ response.js:394:11) 在C:\ Users \ myName \ Desktop \ prodfixes \ server.js:9:7 在Layer.handle [as handle_request](C:\ Users \ myName \ Desktop \ prodfixes \ node_modules \ express \ lib \ router \ layer.js:95:5) 在下一个(C:\ Users \ myName \ Desktop \ prodfixes \ node_modules \ express \ lib \ router \ route.js:131:13) 在Route.dispatch(C:\ Users \ myName \ Desktop \ prodfixes \ node_modules \ express \ lib \ router \ route.js:112:3) 在Layer.handle [as handle_request](C:\ Users \ myName \ Desktop \ prodfixes \ node_modules \ express \ lib \ router \ layer.js:95:5) 在C:\ Users \ myName \ Desktop \ prodfixes \ node_modules \ express \ lib \ router \ index.js:277:22 在param(C:\ Users \ myName \ Desktop \ prodfixes \ node_modules \ express \ lib \ router \ index.js:349:14) 在param(C:\ Users \ myName \ Desktop \ prodfixes \ node_modules \ express \ lib \ router \ index.js:365:14) 在Function.process_params(C:\ Users \ myName \ Desktop \ prodfixes \ node_modules \ express \ lib \ router \ index.js:410:3)
对不起,我是角色和使用服务器的新手,所以任何帮助将不胜感激。感谢。
答案 0 :(得分:1)
使用path.resolve
应以跨平台兼容的方式解决此问题:
var express = require('express'),
path = require('path'),
api = require('./api'),
app = express();
app
.use(express.static('./public'))
.use('./api', api)
.get('*', function (req, res) {
res.sendFile(path.resolve('public/main.html'));
})
.listen(3000);
path.resolve
将提供文件的绝对路径,以满足res.sendFile()
函数的要求:
除非在options对象中设置了root选项,否则 path必须是a 文件的绝对路径。
答案 1 :(得分:0)
我同意S. Buda ......看起来你似乎走错了路。错误指定" TypeError:path必须是绝对的,或者在ServerResponse.sendFile"中为res.sendFile指定root。 - 尝试使用完整路径而不是相对路径。 C:\ Users \ myName \ Desktop \ prodfixes \ public \ main.html而不仅仅是public / main.html。