Error:
{ Error: ER_BAD_NULL_ERROR: Column 'NAME' cannot be null
at Query.Sequence._packetToError (E:\HtmlProject\Server\node_modules\mysql\lib\protocol\sequences\Sequence.js:52:14)
at Query.ErrorPacket (E:\HtmlProject\Server\node_modules\mysql\lib\protocol\sequences\Query.js:77:18)
at Protocol._parsePacket (E:\HtmlProject\Server\node_modules\mysql\lib\protocol\Protocol.js:279:23)
at Parser.write (E:\HtmlProject\Server\node_modules\mysql\lib\protocol\Parser.js:76:12)
at Protocol.write (E:\HtmlProject\Server\node_modules\mysql\lib\protocol\Protocol.js:39:16)
at Socket.<anonymous> (E:\HtmlProject\Server\node_modules\mysql\lib\Connection.js:103:28)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at readableAddChunk (_stream_readable.js:177:18)
at Socket.Readable.push (_stream_readable.js:135:10)
其实就是我的值没传进去,
--register--undefined --nameundefined--passwordundefined-
因为全部都是Undefined
BEFORE传值代码:
IONIC3 post传值:
this.http.post('http://127.0.0.1:8001/register', {
params: {
name: this.register.username,
pass: this.register.userpass,
minority: false
}
}).subscribe((data) => {
console.log(data);
});
后台res.body, res.query, res.params都是{}
post(url: string, body: any | null, options: {
headers?: HttpHeaders | {
[header: string]: string | string[];
};
observe?: 'body';
params?: HttpParams | {
[param: string]: string | string[];
};
reportProgress?: boolean;
responseType: 'arraybuffer';
withCredentials?: boolean;
}): Observable<ArrayBuffer>
唉,原谅我看错了 – ,– 和– . – 的区别, 看错API了,气得我。
这里附上 AngularJS 的 httpClient模块,里面有详细解释
AFTER修改之后的代码:
this.http.post('http://127.0.0.1:8001/register', {
name: this.register.username,
pass: this.register.userpass,
minority: false
}).......
后台res.body, res.query, res.params还是{}
F12
-> network
->XHR
-> 找到请求 -> 发现request payload
里面有东西的,于是我看了这是个什么东西:
博客网址,这个人解释了 Form-data和request payload的区别。
你也可以看看这个解释:
HTTP请求中的form data,request payload,query string parameters以及在node服务器中如何接收这些参数
还是headers的Content-type不一样,form-data并非原生的ajax请求数据,但我们通常用的都是
form-data,这样后台可以用上面的res方法方便读取。我再改一下,这个就有form-data了。 request payload
是 text/plain
this.http.post('http://127.0.0.1:8001/register', {
name: this.register.username,
pass: this.register.userpass,
minority: false
}, {
headers: {
'Content-type': 'application/x-www-form-urlencoded'
}
})
form-data : {"name":"12","pass":"43234","minority":false}:
还有一个point:
按照刚才那样传值上去, nodejs输出结果req.body
是这样的
{ '{"name":"das ","pass":"fsf","minority":false}': '' }
这里的post传值要这样子:
let userUp = 'name=' + this.register.username +
'&pass=' + this.register.userpass +
'&minority=' + this.register.minority;
let header = {
headers: {'Content-type': 'application/x-www-form-urlencoded'}
};
this.navCtrl.pop();
this.http.post('http://127.0.0.1:8001/register', userUp, header).toPromise()
.then( (res)=>{
console.log(res);
}).catch((err)=>{
console.log(err);
});
至于用request payload传值上去的话,要用数据流处理,我还没有研究这个。就这样。