Je suis un réactionnaire/redux/mongoose/passeport noob. Je suppose qu'il devrait renvoyer la réponse à travers axios et à la page de réaction, mais il semble que ce n'est pas ce qui se passe.Impossible de déchiffrer l'erreur avec précision: TypeError: le chemin doit être absolu ou spécifier root à res.sendFile at ServerResponse.sendFile
Je reçois cette erreur vraiment étrange qui est similaire à la question trouvée à this link.
GET /robots.txt 500 6.666 ms - 2143
TypeError: path must be absolute or specify root to res.sendFile
at ServerResponse.sendFile (/Users/eric/Documents/todobuild/node_modules/express/lib/response.js:421:11)
at /Users/eric/Documents/todobuild/server.js:40:12
at Layer.handle [as handle_request] (/Users/eric/Documents/todobuild/node_modules/express/lib/router/layer.js:95:5)
at next (/Users/eric/Documents/todobuild/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/Users/eric/Documents/todobuild/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/Users/eric/Documents/todobuild/node_modules/express/lib/router/layer.js:95:5)
at /Users/eric/Documents/todobuild/node_modules/express/lib/router/index.js:281:22
at param (/Users/eric/Documents/todobuild/node_modules/express/lib/router/index.js:354:14)
at param (/Users/eric/Documents/todobuild/node_modules/express/lib/router/index.js:365:14)
at Function.process_params (/Users/eric/Documents/todobuild/node_modules/express/lib/router/index.js:410:3)
at next (/Users/eric/Documents/todobuild/node_modules/express/lib/router/index.js:275:10)
at SessionStrategy.strategy.pass (/Users/eric/Documents/todobuild/node_modules/passport/lib/middleware/authenticate.js:338:9)
at SessionStrategy.authenticate (/Users/eric/Documents/todobuild/node_modules/passport/lib/strategies/session.js:75:10)
at attempt (/Users/eric/Documents/todobuild/node_modules/passport/lib/middleware/authenticate.js:361:16)
at authenticate (/Users/eric/Documents/todobuild/node_modules/passport/lib/middleware/authenticate.js:362:7)
at Layer.handle [as handle_request] (/Users/eric/Documents/todobuild/node_modules/express/lib/router/layer.js:95:5)
D'après ce que je comprends, la différence entre nos situations est qu'ils obtiennent l'erreur lors du démarrage de leur serveur de nœud, mais le mien commence bien. Ce n'est qu'après avoir configuré ma première demande d'API que j'ai commencé à avoir ce problème.
Le script problème est la suivante:
const mongoose = require('mongoose');
const passport = require('passport');
const User = require('../../models/user.js');
module.exports = function(app) {
app.post('/api/login', function(request, response) {
User.findOne({ email: request.body.email })
.then(function(data) {
if (data.email) {
passport.authenticate('local')(request, response,() => {
if (request.user) {
return response.send(JSON.stringify(request.user));
}
});
}
return response.send(JSON.stringify({ error: 'There was an error logging in.'}));
})
.catch(error => console.log(error));
});
Voici aussi mon fichier server.js pour faire bonne mesure.
const path = require('path');
const express = require('express');
const logger = require('morgan');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const expressSession = require('express-session')({
secret: 'some random string',
resave: false,
saveUninitialized: false
});
const app = express();
const PORT = process.env.PORT || 3000;
mongoose.connect('mongodb://localhost/todo', {useMongoClient: true
});
const db = mongoose.connection;
//models
const User = require('./models/user');
app.use(express.static(path.join(__dirname, './public')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.text());
app.use(bodyParser.json({ type: 'application/vnd.api+json' }));
app.use(expressSession);
app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
//routes
require('./routes/api/api-routes.js')(app);
app.get('*', function(request, response) {
response.sendFile('index.html');
});
db.on('error', function(error) {
console.log('Mongoose Error: ', error);
});
db.once('open', function() {
console.log('Mongoose connection successful.');
});
app.listen(PORT, 'localhost', function() {
console.log('App running on port 3000');
});
dépendances
"dependencies": {
"axios": "^0.16.2",
"babel-core": "^6.26.0",
"babel-loader": "^7.1.2",
"babel-preset-env": "^1.6.0",
"babel-preset-es2015": "^6.24.1",
"babel-preset-import-export": "^1.0.2",
"babel-preset-react": "^6.24.1",
"babel-preset-stage-2": "^6.24.1",
"body-parser": "^1.18.2",
"express": "^4.16.1",
"express-session": "^1.15.6",
"history": "^4.7.2",
"mongoose": "^4.12.0",
"morgan": "^1.9.0",
"passport": "^0.4.0",
"passport-local": "^1.0.0",
"passport-local-mongoose": "^4.2.1",
"react": "^16.0.0",
"react-dom": "^16.0.0",
"react-redux": "^5.0.6",
"react-router": "^4.2.0",
"react-router-dom": "^4.2.2",
"react-router-redux": "^4.0.8",
"redux": "^3.7.2",
"webpack": "^3.6.0"
}
Encore une fois, je suis désolé pour mon ignorance. :(