Ich habe eine aktuelle App, die ich aktualisieren, um die Express Node.js-Bibliothek zu verwenden. Ich habe die Grunt.js-Aufgaben aktualisiert, um das grunt-express-server-Paket zu verwenden. Ein Teil meines Codes versucht, auf den Inhalt einer JSON-Datei zuzugreifen (siehe Verzeichnisstruktur unten). Es wird mit dem Server ganz gut, aber wenn ich versuche, um die statische Datei zuzugreifen ich die folgende Fehlermeldung erhalten:Running Grunt Express Server verursacht Fehler: ENOENT: keine solche Datei oder Verzeichnis, öffnen 'static/test.json'
Error: ENOENT: no such file or directory, open 'static/test.json'
at Error (native)
at Object.fs.openSync (fs.js:549:18)
at Object.fs.readFileSync (fs.js:397:15)
at /Users/owen/src/projects/node-express-cannot-get/build/index.js:13:32
at Layer.handle [as handle_request] (/Users/owen/src/projects/node-express-cannot-get/node_modules/express/lib/router/layer.js:95:5)
at next (/Users/owen/src/projects/node-express-cannot-get/node_modules/express/lib/router/route.js:131:13)
at Route.dispatch (/Users/owen/src/projects/node-express-cannot-get/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/Users/owen/src/projects/node-express-cannot-get/node_modules/express/lib/router/layer.js:95:5)
at /Users/owen/src/projects/node-express-cannot-get/node_modules/express/lib/router/index.js:277:22
at Function.process_params (/Users/owen/src/projects/node-express-cannot-get/node_modules/express/lib/router/index.js:330:12)
Ich denke, das etwas mit meiner Verzeichnisstruktur zu tun hat und wo der Express Server wird ausgeführt . Meine Grunt-Aufgaben kopieren alle meine Quelldateien aus einem Ordner namens src (der meine index.js enthält) in einen Ordner namens Build und führt dann den Server aus der Gruntfile, die im Stammverzeichnis ist. Wenn ich cd
in den Build-Ordner und index.js direkt ausführen (node index.js
), verschwindet der Fehler. Wenn Sie es jedoch über die Grunntask ausführen, wird der Fehler ausgegeben.
Wie kann ich dieses Problem beheben, ohne meine Verzeichnisstruktur zu ändern? Gibt es eine Möglichkeit, die Grunt Express Server-Aufgabe zu ändern, wo sie ausgeführt wird? Oder gibt es einen anderen Grund für dieses Problem?
Bitte siehe mein Verzeichnis sturcture und Codebeispiele unter:
Verzeichnisstruktur (nach Grunt Aufgaben abgeschlossen haben)
/
build/
static/
test.json
index.js
node_modules/
src/
static/
test.json
index.js
Gruntfile.js
package.json
Gruntfile.js
module.exports = function (grunt) {
require('load-grunt-tasks')(grunt);
grunt.config.merge({
clean: {
dev: ['build']
},
mkdir: {
build: {
options: {
mode: 0755,
create: ['build']
}
}
},
copy: {
dev: {
files: [{
expand: true,
cwd: 'src',
src: ['index.js', 'static/**/*'],
dest: 'build'
}]
}
},
express: {
dev: {
options: {
'script': 'build/index.js',
'port': 2000
}
}
},
watch: {
index: {
files: ['index.js'],
tasks: ['clean', 'mkdir', 'copy']
}
}
});
grunt.registerTask('default', [
'clean:dev',
'mkdir:build',
'copy:dev',
'express:dev',
'watch:index'
]);
};
src /index.js
var express = require('express');
var path = require('path');
var fs = require('fs');
var app = express();
app.set('port', (process.env.PORT || 2000));
app.use('/', express.static(path.join(__dirname, '/')));
app.get('/', function (req, res) {
configurationPath = 'static/test.json';
// I beleive this is where the problem happens...
var configurationJSON = fs.readFileSync([configurationPath].join("")).toString();
console.log('configurationJSON', configurationJSON);
res.send('Hello world');
});
app.listen(app.get('port'), function() {
console.log('It\'s all go on port: ' + app.get('port'));
});
ist die 'mkdir' hier wirklich notwendig? versuchen Sie es auch 'build/static' zu spezifizieren (so dass die 'mkdir' Aufgabe es mit den entsprechenden Rechten vergibt), oder verlieren Sie es komplett (also ist die' copy' Aufgabe verantwortlich für das Gewähren von Standardberechtigungen) –
versuchen Sie auch explizit anzugeben a relativer Pfad in Ihrer * index.js * -Datei; set 'configurationPath' zu'./static/test.json' –
Danke @EliranMalka, die Antwort unten löste mein Problem. Können Sie bitte erklären, warum 'mkdir' nicht notwendig ist? Wäre nur die 'copy'-Aufgabe ausreichend? Ich bin ziemlich neu bei Grunt.js. – shrewdbeans