2015-08-17 135 views
0

我有以下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:\用户\ MYNAME \桌面\ prodfixes \ server.js和主。 html位于C:\ Users \ myName \ Desktop \ prodfixes \ public \ main.html 并转到http://localhost:3000/不会在屏幕上引发错误,但是在命令行上(我正在使用nodemon server.js来运行服务器)我收到错误:明确反对res.sendfile:改为使用res.sendFile。于是我明显变化res.sendfile到res.sendFile但后来我得到一个错误,当我刷新画面:

TypeError: path must be absolute or specify root to res.sendFile at ServerResponse.sendFile (C:\Users\myName\Desktop\prodfixes\node_modules\express\lib\response.js:394:11) at C:\Users\myName\Desktop\prodfixes\server.js:9:7 at Layer.handle [as handle_request] (C:\Users\myName\Desktop\prodfixes\node_modules\express\lib\router\layer.js:95:5) at next (C:\Users\myName\Desktop\prodfixes\node_modules\express\lib\router\route.js:131:13) at Route.dispatch (C:\Users\myName\Desktop\prodfixes\node_modules\express\lib\router\route.js:112:3) at Layer.handle [as handle_request] (C:\Users\myName\Desktop\prodfixes\node_modules\express\lib\router\layer.js:95:5) at C:\Users\myName\Desktop\prodfixes\node_modules\express\lib\router\index.js:277:22 at param (C:\Users\myName\Desktop\prodfixes\node_modules\express\lib\router\index.js:349:14) at param (C:\Users\myName\Desktop\prodfixes\node_modules\express\lib\router\index.js:365:14) at Function.process_params (C:\Users\myName\Desktop\prodfixes\node_modules\express\lib\router\index.js:410:3)

对不起,我是新来的角度和使用的服务器,因此任何帮助,将不胜感激。谢谢。

+0

错误听起来像你使用错误的路径。确保它是正确的。尝试不同的潜在途径,直到找到一些资源。你有没有读过sendFile的文档?它可能需要与以前使用的路径不同的路径。 –

回答

0

我同意S. Buda ......绝对好像你有错误的道路。该错误指定“TypeError:路径必须是绝对路径或在ServerResponse.sendFile中指定root到res.sendFile” - 尝试使用完整路径而不是相对路径。 C:\ Users \ myName \ Desktop \ prodfixes \ public \ main.html而不是public/main.html。

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()功能的要求:

Unless the root option is set in the options object, path must be an absolute path of the file.

http://expressjs.com/api.html