首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我有404错误(角度2和节点js)

为什么我有404错误(角度2和节点js)
EN

Stack Overflow用户
提问于 2020-06-20 23:13:00
回答 2查看 163关注 0票数 0

我在我的网站上有一个表单,我想将字段中的数据发送到我的电子邮件中。我使用nodemailer和node js来做这件事。但是当我提交表单时,我在POST请求上有一个404错误。表单组件:

代码语言:javascript
复制
this.http.post('api/sendForm',{
    to: environment.contactUsEmail,
    from: 'zzz',
    subject: 'zzz',
    mailInfo: contactUsData,
}
).subscribe(() => {
    this.cooperationFormGroup.reset();
});

server.ts:(路径: backend /server.ts)文件夹后端在文件夹src附近

代码语言:javascript
复制
const express = require('express');

const bodyParser = require('body-parser');
const nodemailer = require('nodemailer');
const PORT = process.env.PORT || 3000;

const app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.post('api/sendForm', (req, res) => {
        const payload = req.body;
        const mailInfo = payload.mailInfo;

        const transporter = nodemailer.createTransport({
            service: 'gmail',
            host: 'smtp.gmail.com',
            secure: 'true',
            port: '465',
            auth: {
                user: 'email', 
                pass: 'pass',
            }
        });

    const text = [...];
    
    const mailOptions = {
        from: 'zz',
        to: payload.to,
        subject: payload.subject,
        text: text.join('\n'),
    };

        transporter.sendMail(mailOptions, (error, info) => {
            if (error) {
                console.log(error);
            } else {
                console.log('Email sent: ' + info.response);
                res.status(200).json({
                    message: 'successfully sent!'
                })
            }
        });

    });


app.listen(PORT, () => {
    console.log(`Server is running in ${PORT}`);
});

我使用node server.ts在文件夹后端运行server.ts,并使用npm start运行angular应用

EN

回答 2

Stack Overflow用户

发布于 2020-06-20 23:40:45

正如我在上面的评论中提到的:您需要将后端的完整URL传递给post:使用http://localhost:3000/api/sendForm而不是api/sendForm

但是,为了在开发和生产期间管理不同的值,您可能需要使用environment.ts and environment.prod.ts

environments/environment.ts:

代码语言:javascript
复制
export const environment = {
  production: false,
  urlToBackend: 'http://localhost:3000'
}

environments/environment.prod.ts:

代码语言:javascript
复制
export const environment = {
  production: true,
  urlToBackend: 'http://<IP>:3000'
}

service.ts:

在使用npm run build构建生产版本时,environment.ts将被environment.prod.ts替换,如angular.json中所述(请参阅object fileReplacements)。

代码语言:javascript
复制
import { environment } from '../../environments/environment';
...

@Injectable()
export class AppService {

  url = environment.urlToBackend;

  constructor(private http: HttpClient) {
  }

  foo() {
    return this.http.post(`${this.url}/api/sendForm`,{ ... });
  }
}

我的代码不准确,你需要根据你的需要来安排它。然而,我希望您能明白这一点。

票数 1
EN

Stack Overflow用户

发布于 2020-06-20 23:26:10

您需要在.post的第一个参数中提到完整的后端服务器URL。

'api/sendForm'更改为'Your complete backend url'

this.http.post( 'complete backend server url' ,

因为您在端口3000上运行节点服务器。您的后端地址将为http://localhost:3000/api/sendForm

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62487611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档