微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 错误:ENOENT:没有Angular2和Express.js这样的文件或目录

我正在对this sample Angular2 app on GitHub做一些小修改,以便它使用Express.js而不是KOA.但是,当我尝试在FireFox中加载应用程序时,在nodemon控制台中会打印以下错误

Error: ENOENT: no such file or directory

当localhost:8080的http请求触发* router处理程序时,Angular2应用程序开始加载,该处理程序返回index.html,然后触发一系列嵌套依赖项的回调,其中一个引发错误并暂停应用程序加载通过.

需要对GitHub示例中的代码进行哪些具体更改才能解决错误:ENOENT:没有这样的文件或目录?

背景和代码
这是使用Express.js代替KOA的router.js的新替代品:

'use strict';
let uuid = require('node-uuid');
var path = require('path');
let jwt = require('jsonwebtoken');
let config = require('./config');

// expose the routes to our app with module.exports
module.exports = function(app) {

    //all other methods omitted here for brevity

    app.get('*', function(req, res) {
        console.log('inside * route!');           
        if(req.url === '/'){
            res.sendFile(path.resolve('dist/client/index.html')); // load the single view file (angular will handle the front-end)
        } else {
            res.sendFile(path.resolve('./dist/client' + req.url));
        }
    });
};

对于localhost:8080的请求的nodemon控制台输出会反复触发上述Express.js app.get(‘*’…)方法导致错误

App listening on port 8080
inside * route!
GET / 304 54.261 ms - -
inside * route!
inside * route!
inside * route!
GET /boot.css 304 4.637 ms - -
GET /boot.js 304 4.447 ms - -
GET /vendor.js 304 3.742 ms - -
inside * route!
GET /vendor.js.map 200 3.180 ms - 3115631
inside * route!
GET /boot.js.map 200 2.366 ms - 61810
inside * route!
GET /bootstrap.css.map 404 2.515 ms - 169
Error: ENOENT: no such file or directory, stat '/home/user/nodejs_apps/angular2_oauth_seed_app/dist/client/bootstrap.css.map'
    at Error (native)

而指定Express.js的新server/index.js是:

// set up ======================================================================
var express  = require('express');
var app      = express();                               // create our app w/ express
var port     = process.env.PORT || 8080;                // set the port
var morgan = require('morgan');             // log requests to the console (express4)
var bodyParser = require('body-parser');    // pull @R_561_4045@ion from HTML POST (express4)
var methodoverride = require('method-override'); // simulate DELETE and PUT (express4)

app.use('/static', express.static(__dirname + '/dist/client'));
app.use(morgan('dev'));                                         // log every request to the console
app.use(bodyParser.urlencoded({'extended':'true'}));            // parse application/x-www-form-urlencoded
app.use(bodyParser.json());                                     // parse application/json
app.use(bodyParser.json({ type: 'application/vnd.api+json' })); // parse application/vnd.api+json as json
app.use(methodoverride());
app.use('/scripts', express.static(__dirname + '/node_modules/'));

// load the routes
require('./router')(app);

// listen (start app with node server.js) ======================================
app.listen(port);
console.log("App listening on port " + port);

GitHub示例应用程序中的其他所有内容与您在GitHub上看到的内容相同,但package.json除外,它仅包含依赖项以支持router.js和index.js中的更改,如上所示.

解决方法:

bootstrap.css.map表示您的浏览器正在尝试为Bootstrap CSS加载源映射(这是一个调试工具).

只有在浏览器的开发人员工具打开时才会发生这种情况,因此不是严格意义上的问题(除非你想实际调试Bootstrap的CSS).除此之外,总是可以请求其他URL并产生相同的错误.

一个解决方案是为sendFile添加一个显式的错误处理程序,并假设当发生错误时,这是​​因为该文件不存在(所以它应该产生404响应):

res.sendFile(path.resolve('./dist/client' + req.url), (err) => {
  if (err) return res.sendStatus(404);
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐