Node Js访问api laravel

时间:2018-01-12 23:10:12

标签: node.js

嗨我已经在laravel中有一个api,但我需要使用快速节点js访问。

这是我的功能

var data = querystring.stringify({
    _token: 'LhTsymoueRtcWtjP69MD1KEbDyGl0NGuewWOieER',
    propertiesString: properties
});

var options = {
    hostname: 'apiproperties.local',
    port: 80,
    path: '/properties/storeSB',
    method: 'POST',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Content-Length': Buffer.byteLength(data)
    }
    /*headers: {
      'Content-Type': 'application/json',
    }*/
};

var req = http.request(options, function(res) {
    res.setEncoding('utf8');
    console.log('Status: ' + res.statusCode);
    console.log('Headers: ' + JSON.stringify(res.headers));
    res.on('data', function (chunk) {
        console.log("body: " + chunk);
    });
});

req.write(data);
req.end();

这给我错误Illuminate / Foundation / Http / Middleware / VerifyCsrfToken.php第68行,因为我不发送_token,但我不知道如何在nodejs中发送令牌我没有在nodejs中的视图,因为我不想使用我不需要它,如何在我的帖子请求中发送令牌而不在一个视图中调用表单?问候

1 个答案:

答案 0 :(得分:1)

您应该从Laravel中删除您在CSRF保护检查中间件中写的api默认VerifyCsrfToken中间件应用于路由组web,所以这里有两个选项: -

  1. 创建名为api 的新中间件组 用于创建中间件的代码段
    routes.php

    Route::group(['prefix' => 'api/v1','middleware' => ['api']], function () { Route::get('/hotel/list',[ 'uses' => 'YourController@function' ]); });

    VerifyCsrfToken.php

    protected $except = [ 'api/v1/*', ];

  2. 直接排除CSRF检查路线
    VerifyCsrfToken.php中添加要忽略的所有api的URL以进行CSRF检查

    class VerifyCsrfToken extends BaseVerifier { /** * The URIs that should be excluded from CSRF verification. * * @var array */ protected $except = [ 'url_regex' ]; }

  3. 我们建议使用第一种方法,因为所有未来的新路由都可以解决,我们只需要在这个中间件组下添加该路由。

    如果有问题,或者有任何疑问,请在评论中告诉我。