Node.js 当我通过angular 8点击节点JSAPI时出错:Error:ER_BAD_NULL_Error:Column';名称';不能是nul

Node.js 当我通过angular 8点击节点JSAPI时出错:Error:ER_BAD_NULL_Error:Column';名称';不能是nul,node.js,angular,Node.js,Angular,我对node和angular非常陌生,我试图将数据插入mysql当我通过postman测试此api时,我有NodeAPI记录成功插入,但当我通过angular调用NodeAPI时,我得到了错误 angular CLI: 7.3.1 Node: 10.15.0 nodejs const express = require('express'); const bodyParser = require('body-parser'); const app = express(); const mysq

我对node和angular非常陌生,我试图将数据插入
mysql
当我通过
postman
测试此api时,我有
NodeAPI
记录成功插入,但当我通过angular调用NodeAPI时,我得到了错误

angular CLI: 7.3.1
Node: 10.15.0
nodejs

const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const mysql = require('mysql');

const cors = require('cors');
app.use(bodyParser.json());

app.use(function (req, res, next) {
  res.header("Access-Control-Allow-Origin", "http://localhost:4200");
  res.header('Access-Control-Allow-Methods', 'DELETE, PUT, POST');
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  if ('OPTIONS' == req.method) {
     res.sendStatus(200);
   }
   else {
     next();
   }
  });

const conn = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: 'root',
  database: 'auth'
});

conn.connect((err) =>{
  if(err) throw err;
  console.log('Mysql Connected...');
});

conn.on('error', function(err) {
  console.log("[mysql error]",err);
})

app.post('/add/',(req, res) => {
  let data = {name: req.body.name, email: req.body.email, password: req.body.password, contact: req.body.contact};
  let sql = "INSERT INTO registration SET ?";
  let query = conn.query(sql, data,(err, results) => {
    if(err) throw err;
    res.send(JSON.stringify({"status": 200, "error": null, "response": results}));
  });
});

app.listen(3000,() =>{
  console.log('Server started on port 3000...');
});
@Component({
  selector: 'app-sign-up',
  templateUrl: './sign-up.component.html',
  styleUrls: ['./sign-up.component.css']
})
export class SignUpComponent implements OnInit {


private userDetails = User;

userEmails = new FormGroup({
  email: new FormControl('', [
    Validators.required,
    Validators.pattern("^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$")]),

    firstName: new FormControl('', [
      Validators.required
    ]),

    password: new FormControl('', [

      Validators.required,
      Validators.pattern("(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&].{8,}")

    ]),

    confirmPassword: new FormControl('', [
      Validators.required
    ]),

    contact: new FormControl('', [

      Validators.required,
      Validators.maxLength(10),
      Validators.minLength(10),
      Validators.pattern("^((\\+91-?)|0)?[0-9]{10}$")
    ])
}, 

{
    validators: CustomValidators.passwordMatchValidator
}
);
  constructor(private authService: AuthService) {
  }
   get validations() {
     return this.userEmails.controls;
   }

  ngOnInit() {
  }

  onDisplay() {
    console.log(this.userEmails.value);
    this.authService.registerUser(this.userEmails.value)
    .subscribe(
      res => console.log(res),
      err => console.log(err)
    )  
  }
}
角度:注册.component.ts

const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const mysql = require('mysql');

const cors = require('cors');
app.use(bodyParser.json());

app.use(function (req, res, next) {
  res.header("Access-Control-Allow-Origin", "http://localhost:4200");
  res.header('Access-Control-Allow-Methods', 'DELETE, PUT, POST');
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  if ('OPTIONS' == req.method) {
     res.sendStatus(200);
   }
   else {
     next();
   }
  });

const conn = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: 'root',
  database: 'auth'
});

conn.connect((err) =>{
  if(err) throw err;
  console.log('Mysql Connected...');
});

conn.on('error', function(err) {
  console.log("[mysql error]",err);
})

app.post('/add/',(req, res) => {
  let data = {name: req.body.name, email: req.body.email, password: req.body.password, contact: req.body.contact};
  let sql = "INSERT INTO registration SET ?";
  let query = conn.query(sql, data,(err, results) => {
    if(err) throw err;
    res.send(JSON.stringify({"status": 200, "error": null, "response": results}));
  });
});

app.listen(3000,() =>{
  console.log('Server started on port 3000...');
});
@Component({
  selector: 'app-sign-up',
  templateUrl: './sign-up.component.html',
  styleUrls: ['./sign-up.component.css']
})
export class SignUpComponent implements OnInit {


private userDetails = User;

userEmails = new FormGroup({
  email: new FormControl('', [
    Validators.required,
    Validators.pattern("^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$")]),

    firstName: new FormControl('', [
      Validators.required
    ]),

    password: new FormControl('', [

      Validators.required,
      Validators.pattern("(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&].{8,}")

    ]),

    confirmPassword: new FormControl('', [
      Validators.required
    ]),

    contact: new FormControl('', [

      Validators.required,
      Validators.maxLength(10),
      Validators.minLength(10),
      Validators.pattern("^((\\+91-?)|0)?[0-9]{10}$")
    ])
}, 

{
    validators: CustomValidators.passwordMatchValidator
}
);
  constructor(private authService: AuthService) {
  }
   get validations() {
     return this.userEmails.controls;
   }

  ngOnInit() {
  }

  onDisplay() {
    console.log(this.userEmails.value);
    this.authService.registerUser(this.userEmails.value)
    .subscribe(
      res => console.log(res),
      err => console.log(err)
    )  
  }
}
角度:身份验证服务

@Injectable()
export class AuthService {

  private registerUrl = "http://localhost:3000/add/";
   constructor(private http: HttpClient) { }


registerUser(register:User) {
  console.log(register);
  return this.http.post<any>(this.registerUrl, register);

}

}
我甚至不知道这个错误是因为angular还是因为node,我在谷歌搜索得到它是因为
CROS
,但我也在服务器端添加了
CROS header
,但仍然没有运气,也添加了firefox扩展
CROS Everywhere
,但仍然没有运气

从节点终端获取数据时出错

 throw err; // Rethrow non-MySQL errors
      ^

Error: ER_BAD_NULL_ERROR: Column 'name' cannot be null
    at Query.Sequence._packetToError (F:\angular\New folder\server\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14)
    at Query.ErrorPacket (F:\angular\New folder\server\node_modules\mysql\lib\protocol\sequences\Query.js:79:18)
    at Protocol._parsePacket (F:\angular\New folder\server\node_modules\mysql\lib\protocol\Protocol.js:291:23)
    at Parser._parsePacket (F:\angular\New folder\server\node_modules\mysql\lib\protocol\Parser.js:433:10)
    at Parser.write (F:\angular\New folder\server\node_modules\mysql\lib\protocol\Parser.js:43:10)
    at Protocol.write (F:\angular\New folder\server\node_modules\mysql\lib\protocol\Protocol.js:38:16)
    at Socket.<anonymous> (F:\angular\New folder\server\node_modules\mysql\lib\Connection.js:88:28)
    at Socket.<anonymous> (F:\angular\New folder\server\node_modules\mysql\lib\Connection.js:526:10)
    at Socket.emit (events.js:182:13)
    at addChunk (_stream_readable.js:283:12) 
抛出错误;//重新显示非MySQL错误
^
错误:ER\U BAD\U NULL\U错误:“名称”列不能为空
在Query.Sequence.\u packetToError(F:\angular\New folder\server\node\u modules\mysql\lib\protocol\sequences\Sequence.js:47:14)
在Query.ErrorPacket(F:\angular\New folder\server\node\u modules\mysql\lib\protocol\sequences\Query.js:79:18)
at Protocol.\u parsePacket(F:\angular\New folder\server\node\u modules\mysql\lib\Protocol\Protocol.js:291:23)
在Parser.\u parsePacket(F:\angular\New folder\server\node\u modules\mysql\lib\protocol\Parser.js:433:10)
在Parser.write(F:\angular\New folder\server\node\u modules\mysql\lib\protocol\Parser.js:43:10)
在Protocol.write(F:\angular\New folder\server\node\u modules\mysql\lib\Protocol\Protocol.js:38:16)
在插座上。(F:\angular\New folder\server\node\u modules\mysql\lib\Connection.js:88:28)
在插座上。(F:\angular\New folder\server\node\u modules\mysql\lib\Connection.js:526:10)
在Socket.emit(events.js:182:13)
在addChunk(_stream_readable.js:283:12)

是逻辑或语法问题还是版本问题?请在此帮助我。

根据节点服务器日志中报告的以下错误,您的MySQL insert语句似乎有问题。好像

错误:ER\U BAD\U NULL\U错误:“名称”列不能为空

根据您的代码,只要您的客户端在端口4200上运行,CORS就可以工作

如果您想进行快速测试,请尝试删除MySQL插入代码,并简单地返回一个伪对象,如下面的示例所示

app.post('/add/',(req, res) => {
  res.send(JSON.stringify({"status": 200, "error": null, "response": "added 1 row"}));
});
如果你的angular应用程序仍然没有回复,请告诉我

另外,回到您最初的错误,您似乎没有在节点服务器方法中引用正确的名称[即req.body.name似乎不存在,请检查您的

userEmail.value


物体呈棱角状。

真的非常感谢你,兄弟,正如你所说,我指的不是正确的名称,我更正了,现在它工作正常。太好了!继续