如何将express.js服务器部署到Netlify

时间:2020-01-22 21:40:34

标签: javascript node.js express vue.js netlify

我正在尝试将Vue.js,Node,Express,MongoDB(MEVN)堆栈应用程序部署到Netlify。我已成功将应用程序的前端部署到Netlify,现在基于以下serverless-http示例,尝试部署Express服务器:https://github.com/neverendingqs/netlify-express/blob/master/express/server.js

我将服务器配置为包括serverless-http软件包:

server.js

const express = require('express');
const app = express();
const serverless = require('serverless-http');
const bodyParser = require('body-parser');
const cors = require('cors');
const mongoose = require('mongoose');
const config = require('./DB.js');
const postRoute = require('./routes');

mongoose.connect(config.DB, { useNewUrlParser: true, useUnifiedTopology: true }).then(
  () => { console.log('Database is connected') },
  err => { console.log('Can not connect to the database'+ err)}
);

app.use(cors());
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());

app.use('/messages', postRoute);

app.use('/.netlify/functions/server', router);  // path must route to lambda
app.use('/', (req, res) => res.sendFile(path.join(__dirname, '../public/index.html')));


module.exports = app;
module.exports.handler = serverless(app);

routes.js

const express = require('express');
const postRoutes = express.Router();

// Require Post model in our routes module
let Post = require('./post.model');

// Defined store route
postRoutes.route('/add').post(function (req, res) {
  let post = new Post(req.body);
  post.save()
    .then(() => {
      res.status(200).json({'business': 'business in added successfully'});
    })
    .catch(() => {
      res.status(400).send("unable to save to database");
    });
});

// Defined get data(index or listing) route
postRoutes.route('/').get(function (req, res) {
    Post.find(function(err, posts){
    if(err){
      res.json(err);
    }
    else {
      res.json(posts);
    }
  });
});

module.exports = postRoutes;

然后我将我的应用程序重新部署到Netlify,但是服务器似乎未在Netlify中运行。该服务器位于我的vue.js应用程序项目根目录中的文件夹中。我是否应该在Netlify中将服务器作为单独的站点运行?如果不是,我应该怎么做才能使服务器在Netlify中部署后运行?

2 个答案:

答案 0 :(得分:0)

已经有一段时间了,但是现在可以了。

Netlify托管用于Jamstack,正如他们所说的,即仅静态文件,在服务器上无处理。这个想法是利用其他机制来动态获取数据,例如在其他地方托管的API,这些API可以直接从浏览器查询,也可以在构建网站时查询。

实际上,您实际上很有可能必须将express.js应用程序部署为Netlify函数。选中Netlify's blog post on running express apps on their functions

答案 1 :(得分:0)

我遇到了类似的问题,只是我的服务器无法连接到本地的路由,我的代码和你的代码之间的主要区别在于我必须这样做

const router = express.Router()

然后将 app.use() 切换为 router.use()

就像我说的,这是当本地主机说“无法获取 /* 定义的路径 */”时

附言作为旁注,您在最近的 express 中不需要显式 bodyParser,而 express.json() 可以正常工作。