如何构建一个提供API和视图的Express应用程序?

时间:2017-08-30 04:55:17

标签: javascript node.js express routing

所以我正在尝试构建一个服务于网站的小应用程序,以及它的API。我正在使用Node,Express和Webpack。

目录看起来像这样:

>client
  |>dist
  |>src
>server
  |>dist
  |>src
>node_modules
 package.json
 webpack.config.js

Webpack将每个src中的所有内容捆绑在一起,并在distclient的每个server中将其吐出。

当我访问/时,我希望Express在index.html中提供client/dist文件。当我访问/api时,我需要它来做其他操作(那些工作正常)。

这就是我的server/src/app.js文件的样子(谁处理路由):

const express = require('express');
const path = require('path');

const port = process.env.PORT || 5000;
const app = express();

app.get('/', function(req, res){
  res.sendFile(path.resolve(__dirname, 'client', 'dist', 'index.html'));
  console.log('got hit on / boy');
});

app.get('/api/', function(req, res) { 
  //Does the right thing
})

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

我的Webpack文件:

const path = require('path');

module.exports = [{
  name: 'Client bundling',
  entry: './client/src/app.js',
  output: {
    path: path.resolve(__dirname, 'client', 'dist', 'js'),
    filename: 'bundle.js'
  },
  node: {
    fs: 'empty',
    net: 'empty'
  }
},
{
  name: 'Server bundling',
  entry: './server/src/app.js',
  output: {
    path: path.resolve(__dirname, 'server', 'dist'),
    filename: 'bundle.js'
  },
  node: {
    fs: 'empty',
    net: 'empty'
  },
  target: 'node'
}];

我的后续问题是如何从服务的View访问API端点,因为它们都位于同一个域中。

谢谢!

1 个答案:

答案 0 :(得分:0)

您指向的文件不存在。 改变这个

res.sendFile(path.resolve(__dirname, 'client', 'dist', 'index.html')

到这个

res.sendFile(path.resolve("../..", 'client', 'dist', 'index.html')