将 Angular 应用程序连接到服务器

Posted

技术标签:

【中文标题】将 Angular 应用程序连接到服务器【英文标题】:connect an angular application to a server 【发布时间】:2019-07-30 08:50:45 【问题描述】:

我是 Angular 的初学者,我用我的数据库 mysql 创建了带有 Rest Crud API 的 Nodeserver,我想将它与我的项目 Angular(ngx nebular)相关联,但我做不到,谢谢你帮助我

这是 app.js

 var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var bodyParser = require('body-parser');
var cors = require('cors');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var user=require('./model/user');
var api = require('./routes/api'); 

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(cors());
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded( extended: false ));
app.use(express.json());
app.use(express.urlencoded( extended: false ));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/user',api);

// catch 404 and forward to error handler
app.use(function(req, res, next) 
  next(createError(404));
);

// error handler
app.use(function(err, req, res, next) 
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : ;

  // render the error page
  res.status(err.status || 500);
  res.render('error');
);

module.exports = app;

`

【问题讨论】:

【参考方案1】:

您需要加载mysql 库才能访问其功能。您还需要为主页设置一个 GET 处理程序,并将路由分配给它。

1) 引入 MySQL @app.js

const mysql = require('mysql');

// ... other stuff here ...

// the mysql.createConnection function takes in a configuration object 
// this contains host, user, password and the database name.
const db = mysql.createConnection (
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'latelist'
);

// connect to database
db.connect((err) => 
    if (err) 
        throw err;
    
    console.log('Connected to database');
);
global.db = db;

2) 路由 yourHomepageFunction

在您的情况下,我们已经通过indexRouter.js 进行路由,重要的是这在app.js 的第3 步之前。

app.use('/', indexRouter);

3) 为 / 分配 GET 处理程序

最后,确保您在app.js 的某处为主页设置了 GET 处理程序,阿拉:

app.get('/', yourHomepageFunction);

为了后代,这里是indexRouter.js 的样例:

module.exports = 
    yourHomepageFunction: (req, res) => 
        res.render("homepage.ejs", 
             // Stuff here such as passing title variables, etc
        );
    
;

【讨论】:

【参考方案2】:

您应该听取所有 GET 请求并仅将您的 index.html 文件作为文件发送,该文件实际上应该包含您的 Angular SPA。像这样的:

app.get('*', (req, res) => 
  res.sendFile(path.join(__dirname, 'index.html'));    
);

您可以查看 Express 文档:http://expressjs.com/fr/api.html#res.sendFile

【讨论】:

但我不会将我的 Angular 项目连接到服务器

以上是关于将 Angular 应用程序连接到服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Angular 9 登录页面连接到 Spring Boot 应用程序?

如何从 Angular Nginx 容器连接到 Node API docker 容器

将 Angular 应用程序连接到多个 Apollo 客户端

MEAN Stack - 将云 MongoDB 连接到 Angular 应用程序?

如何使用 Web3.js 将 Metamask 连接到 Angular App?

连接到 Web API 的 Angular/Breeze 应用程序在 IE11 上引发“拒绝访问”错误