2015-09-28 152 views
0

我有一个很难知道为什么,当我访问我的HTTP服务器http://localhost:8000/,我得到一个“无法GET /”的消息。我在客户端使用express js来路由服务器端和角度。快递JS路由错误(“不能GET /”)

我已阅读,这个错误是存在的,因为我还没有设置“/”路径的路线,但我不希望任何路由那里,只想让我的角柄“/”。

仅供参考,我的Express服务器是比角应用不同的路径。

MY节点代码:

var bcrypt = require('bcryptjs'); 
var bodyParser = require('body-parser'); 
var cors = require('cors'); 
var express = require('express'); 
var jwt = require('jwt-simple'); 
var moment = require('moment'); 
var mongoose = require('mongoose'); 
var path = require('path'); 
var request = require('request'); 
var compress = require('compression'); 

var config = require('./config'); 

var User = mongoose.model('User', new mongoose.Schema({ 
    instagramId: { type: String, index: true }, 
    email: { type: String, unique: true, lowercase: true }, 
    password: { type: String, select: false }, 
    username: String, 
    fullName: String, 
    picture: String, 
    accessToken: String 
})); 

mongoose.connect(config.db); 

var app = express(); 

app.set('port', process.env.PORT || 8000); 
app.use(compress()); 
app.use(cors()); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(express.static(path.join(__dirname, 'public'), { maxAge: 2628000000 })); 

/* 
|-------------------------------------------------------------------------- 
| Login Required Middleware 
|-------------------------------------------------------------------------- 
*/ 
function isAuthenticated(req, res, next) { 
    if (!(req.headers && req.headers.authorization)) { 
    return res.status(400).send({ message: 'You did not provide a JSON Web Token in the Authorization header.' }); 
    } 

    var header = req.headers.authorization.split(' '); 
    var token = header[1]; 
    var payload = jwt.decode(token, config.tokenSecret); 
    var now = moment().unix(); 

    if (now > payload.exp) { 
    return res.status(401).send({ message: 'Token has expired.' }); 
    } 

    User.findById(payload.sub, function(err, user) { 
    if (!user) { 
     return res.status(400).send({ message: 'User no longer exists.' }); 
    } 

    req.user = user; 
    next(); 
    }) 
} 

/* 
|-------------------------------------------------------------------------- 
| Generate JSON Web Token 
|-------------------------------------------------------------------------- 
*/ 
function createToken(user) { 
    var payload = { 
    exp: moment().add(14, 'days').unix(), 
    iat: moment().unix(), 
    sub: user._id 
    }; 

    return jwt.encode(payload, config.tokenSecret); 
} 

/* 
|-------------------------------------------------------------------------- 
| Sign in with Email 
|-------------------------------------------------------------------------- 
*/ 
app.post('/auth/login', function(req, res) { 
    User.findOne({ email: req.body.email }, '+password', function(err, user) { 
    if (!user) { 
     return res.status(401).send({ message: { email: 'Incorrect email' } }); 
    } 

    bcrypt.compare(req.body.password, user.password, function(err, isMatch) { 
     if (!isMatch) { 
     return res.status(401).send({ message: { password: 'Incorrect password' } }); 
     } 

     user = user.toObject(); 
     delete user.password; 

     var token = createToken(user); 
     res.send({ token: token, user: user }); 
    }); 
    }); 
}); 

/* 
|-------------------------------------------------------------------------- 
| Create Email and Password Account 
|-------------------------------------------------------------------------- 
*/ 
app.post('/auth/signup', function(req, res) { 
    User.findOne({ email: req.body.email }, function(err, existingUser) { 
    if (existingUser) { 
     return res.status(409).send({ message: 'Email is already taken.' }); 
    } 

    var user = new User({ 
     email: req.body.email, 
     password: req.body.password 
    }); 

    bcrypt.genSalt(10, function(err, salt) { 
     bcrypt.hash(user.password, salt, function(err, hash) { 
     user.password = hash; 

     user.save(function() { 
      var token = createToken(user); 
      res.send({ token: token, user: user }); 
     }); 
     }); 
    }); 
    }); 
}); 

/* 
|-------------------------------------------------------------------------- 
| Sign in with Instagram 
|-------------------------------------------------------------------------- 
*/ 
app.post('/auth/instagram', function(req, res) { 
    var accessTokenUrl = 'https://api.instagram.com/oauth/access_token'; 

    var params = { 
    client_id: req.body.clientId, 
    redirect_uri: req.body.redirectUri, 
    client_secret: config.clientSecret, 
    code: req.body.code, 
    grant_type: 'authorization_code' 
    }; 

    // Step 1. Exchange authorization code for access token. 
    request.post({ url: accessTokenUrl, form: params, json: true }, function(error, response, body) { 

    // Step 2a. Link user accounts. 
    if (req.headers.authorization) { 

     User.findOne({ instagramId: body.user.id }, function(err, existingUser) { 

     var token = req.headers.authorization.split(' ')[1]; 
     var payload = jwt.decode(token, config.tokenSecret); 

     User.findById(payload.sub, '+password', function(err, localUser) { 
      if (!localUser) { 
      return res.status(400).send({ message: 'User not found.' }); 
      } 

      // Merge two accounts. Instagram account takes precedence. Email account is deleted. 
      if (existingUser) { 

      existingUser.email = localUser.email; 
      existingUser.password = localUser.password; 

      localUser.remove(); 

      existingUser.save(function() { 
       var token = createToken(existingUser); 
       return res.send({ token: token, user: existingUser }); 
      }); 

      } else { 
      // Link current email account with the Instagram profile information. 
      localUser.instagramId = body.user.id; 
      localUser.username = body.user.username; 
      localUser.fullName = body.user.full_name; 
      localUser.picture = body.user.profile_picture; 
      localUser.accessToken = body.access_token; 

      localUser.save(function() { 
       var token = createToken(localUser); 
       res.send({ token: token, user: localUser }); 
      }); 

      } 
     }); 
     }); 
    } else { 
     // Step 2b. Create a new user account or return an existing one. 
     User.findOne({ instagramId: body.user.id }, function(err, existingUser) { 
     if (existingUser) { 
      var token = createToken(existingUser); 
      return res.send({ token: token, user: existingUser }); 
     } 

     var user = new User({ 
      instagramId: body.user.id, 
      username: body.user.username, 
      fullName: body.user.full_name, 
      picture: body.user.profile_picture, 
      accessToken: body.access_token 
     }); 

     user.save(function() { 
      var token = createToken(user); 
      res.send({ token: token, user: user }); 
     }); 
     }); 
    } 
    }); 
}); 

app.get('/api/feed', isAuthenticated, function(req, res) { 
    var feedUrl = 'https://api.instagram.com/v1/users/self/feed'; 
    var params = { access_token: req.user.accessToken }; 

    request.get({ url: feedUrl, qs: params, json: true }, function(error, response, body) { 
    if (!error && response.statusCode == 200) { 
     res.send(body.data); 
    } 
    }); 
}); 

app.get('/api/media/:id', isAuthenticated, function(req, res) { 
    var mediaUrl = 'https://api.instagram.com/v1/media/' + req.params.id; 
    var params = { access_token: req.user.accessToken }; 

    request.get({ url: mediaUrl, qs: params, json: true }, function(error, response, body) { 
    if (!error && response.statusCode == 200) { 
     res.send(body.data); 
    } 
    }); 
}); 

app.post('/api/like', isAuthenticated, function(req, res) { 
    var mediaId = req.body.mediaId; 
    var accessToken = { access_token: req.user.accessToken }; 
    var likeUrl = 'https://api.instagram.com/v1/media/' + mediaId + '/likes'; 

    request.post({ url: likeUrl, form: accessToken, json: true }, function(error, response, body) { 
    if (response.statusCode !== 200) { 
     return res.status(response.statusCode).send({ 
     code: response.statusCode, 
     message: body.meta.error_message 
     }); 
    } 
    res.status(200).end(); 
    }); 
}); 

app.listen(app.get('port'), function() { 
    console.log('Express server listening on port ' + app.get('port')); 
}); 

回答

1

当您使用角为您的Web应用程序,你会希望你的Express服务器,为所有的时候,你的土地链接“http://localhost:8000/”有关的前端,因此文件,快速将服务于相关文件回来。该文件夹将包括.js,.css和.html文件以及所有其他资源(图像,视频等),以便您可以将它们链接到您的标记中。 (例如link href =“/ logo.png”)。

,你可以告诉快递使用Static Middleware广告客户使用快递这些文件。

使用中间件,你会告诉快递服务于特定的文件夹作为静态资源的内容。把你的Angular App放在文件夹中,然后让Angular处理路线。

var publicFolder = path.join(__dirname, '../client') 
app.use(express.static(publicFolder); 

您将注册其他端点为您的Web应用程序创建API。所以Express服务器将能够通过这些端点向Angular应用程序提供数据。

3

在这种情况下,那么你就应该抓住所有的航线/对角。

把这段代码在最后的路线定义错误处理程序之前。

app.get('*', function (req, res) { 
    res.sendFile('/path/to/angular/index.html'); 
}); 
+1

谢谢。我用app.use(express.static(path.join(__ dirname,'../client'))); –